`

Struts2中实现文件上传(附源码)

阅读更多

Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传.


实现原理 :

Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

具体实现

前段时间Apache发布了Struts 2.1GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:
依赖类包的列表
其中commons-io-1.1.jar和commons-fileupload-1.1.3.jar可以在
http://jakarta.apache.org/
上下载.

★ 文件上传页面 index.jsp:

<%@ page language="java" pageEncoding="GB18030"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
  
<head>
    
<title>Upload Page</title>
  
</head>
  
<body>
  
<s:form action="upload" method="post" enctype="multipart/form-data">
      
<s:file name="doc" label="File"/>
      
<s:submit value="upload"/>
  
</s:form>
  
</body>
</html>


先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处.
★ 处理文件上传 FileUploadAction.java:

package com;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport
{
    
private static final long serialVersionUID = 4658947796066228597L;
    
private File doc;
    
private String fileName;
    
private String contentType;

    
public void setDoc(File file)
    
{
        
this.doc = file;
    }


    
public void setDocFileName(String fileName)
    
{
        
this.fileName = fileName;
    }


    
public void setDocContentType(String contentType)
    
{
        
this.contentType = contentType;
    }


    @Override
    
public String execute() throws Exception
    
{
        System.out.println(
"fileName:" + fileName);
        System.out.println(
"contextType" + contentType);
        
// 得到当前web工程下的/files目录的在本机的绝对路径,如果没有这个文件夹则会创建
        String targetDirectory = ServletActionContext.getServletContext()
                .getRealPath(
"/files");
        
//重命名上传文件
        String targetFileName = generateFileName(fileName);
        
//在指定目录创建文件
        File target = new File(targetDirectory, targetFileName);
        
//把要上传的文件copy过去
        FileUtils.copyFile(doc, target);
        
return SUCCESS;
    }

    
//重命名上传文件(非必须)
    public String generateFileName(String fileName)
    
{
        String formatDate 
= new SimpleDateFormat("yyMMddHHmmss")
                .format(
new Date());
        
int random = new Random().nextInt(10000);
        
int position = fileName.lastIndexOf(".");
        String extension 
= fileName.substring(position);

        
return formatDate + random + extension;
    }


    
public String getFileName()
    
{
        
return fileName;
    }


}


在fileupload.jsp中,只有doc一个字段,而FileUploadAction.java中,却有三个字段,Struts2怎么通过页面的一个字段设置Action里的三个字段呢?没错,这就是FileUploadInterceptor的功劳了!你所要做的只是按照一定的样式命名这三个字段的set方法,而字段名可以任意命名。第一个File类型的字段的set方法还是以常规的方式命名,另两个String类型的字段的set方法必须分别以“File字段的set方法名+FileName”和“File字段的set方法名+ContentType”来命名。

★ 配置文件 struts.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
    
<package name="com" extends="struts-default">
        
<action name="upload" class="com.FileUploadAction">
            
<result name="success">/success.jsp</result>
        
</action>
    
</package>
</struts>    
★ 配置文件 web.xml:
<?xml version="1.0" encoding="UTF-8"?>   
<web-app version="2.4"     
    xmlns
="http://java.sun.com/xml/ns/j2ee"     
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"     
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee     
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>   
        
    
<filter>   
        
<filter-name>struts-cleanup</filter-name>   
        
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>   
    
</filter>   
        
    
<filter>   
        
<filter-name>struts2</filter-name>   
        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>   
    
</filter>   
        
    
<filter-mapping>   
        
<filter-name>struts-cleanup</filter-name>   
        
<url-pattern>/*</url-pattern>   
    
</filter-mapping>   
        
    
<filter-mapping>   
        
<filter-name>struts2</filter-name>   
        
<url-pattern>/*</url-pattern>   
    
</filter-mapping>   
   
</web-app>   

OK!源码可以我的微软网盘下载.

々上善若水々 2007-11-27 19:49 发表评论
分享到:
评论

相关推荐

    Struts2+上传文件源码

    在Struts2中实现文件上传功能是一项常见的需求,尤其在处理用户提交的表单数据时,例如用户上传个人照片、文档等。这个"Struts2+上传文件源码"是一个演示如何在Struts2框架下实现文件上传的示例代码。 首先,我们来...

    Struts2文件上传源码

    在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解Struts2文件上传的实现原理以及源码分析。 首先,理解文件上传的基本流程。当用户通过HTML表单选择文件...

    struts2文件上传下载源代码

    描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...

    通过Servlet文件上传理解Struts2文件上传原理(附源码)

    在本文中,我们将深入探讨如何使用Servlet来理解Struts2中的文件上传原理。Servlet是Java Web应用程序中的一个组件,用于处理HTTP请求和响应。而Struts2是一个基于MVC(模型-视图-控制器)设计模式的开源Web应用框架...

    struts2上传和下载文件详细源码

    在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件中启用文件上传支持,通过`&lt;constant&gt;`标签设置`struts.multipart.parser`为jakarta。接着,创建一个Action类,该类...

    ssh框架用struts2 hibernate实现图片的上传源码

    3. **图片上传处理**:在Struts2中,通常会有一个专门处理文件上传的Action,它需要继承`org.apache.struts2.interceptor.FileUploadInterceptor`拦截器,以支持文件上传。用户上传的图片会被暂时存储在服务器的一个...

    ajaxFileUpload+struts2实现多文件上传(源码)

    在本文中,我们将深入探讨如何使用`ajaxFileUpload`与`Struts2`框架结合,实现多文件上传功能。这个示例源码提供了一个实用的方法,使得用户可以在不刷新整个页面的情况下,上传多个文件,提高了用户体验。 首先,`...

    Struts1实现文件上传源码

    在这个“Struts1实现文件上传源码”实例中,我们将深入探讨如何利用Struts1框架来处理文件上传操作。 在Web应用中,文件上传功能是非常常见的,比如用户上传头像、提交文档等。Struts1提供了ActionForm类和一系列...

    struts2+ajax文件进度条的实现

    在Struts2中实现文件上传功能,通常会涉及到处理大文件、用户体验优化等问题,如显示文件上传进度条。这个场景下,我们结合Ajax技术,可以创建一个实时反馈文件上传进度的动态界面,提升用户交互体验。 首先,我们...

    Struts2 单个、批量文件上传 精简源码

    在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。你需要在项目中引入这个库,并在Action类中定义一个`File`或`java.io.File`类型的属性来接收上传的文件。同时,你还需要设置表单的`enctype`属性为`...

    struts2文件上传源码和步骤

    在 Struts2 中,文件上传功能是通过特定的拦截器(`FileUploadInterceptor`)来实现的。以下是对标题和描述中所述知识点的详细解释: 1. **文件上传原理**: 文件上传的本质是客户端浏览器将本地文件以二进制流的...

    Struts2实现多文件上传

    通过以上步骤,我们就能在Struts2环境中实现多文件上传的功能。需要注意的是,实际应用中还要考虑文件的安全性,例如防止文件覆盖、限制上传文件类型和大小,以及处理可能出现的异常情况。同时,对于文件保存路径的...

    Struts+swfupload实现文件上传功能

    Struts和SwfUpload是两种在Web开发中用于构建强大功能的应用工具,它们结合使用可以实现高效的文件上传功能。在本文中,我们将深入探讨这两个组件以及如何将它们整合以实现文件上传。 首先,Struts是一个基于MVC...

    Struts2中实现文件上传

    在Struts2中实现文件上传是一项常见的任务,这通常涉及到处理用户通过表单提交的文件,例如图片、文档或其他类型的数据。这个过程涉及到多个步骤和技术,包括前端HTML表单的构造、后端Struts2的配置以及文件存储策略...

    android客户端上传文件源码,struts2服务端接收源码 .zip

    在服务端接收文件时,Struts2可以使用`FileUploadInterceptor`或自定义Action来处理文件上传。开发者需要配置Struts2的XML配置文件,指定允许上传的文件类型、大小限制等。 服务端的关键步骤包括: 1. 检查请求:...

    Extjs+Struts2实现异步文件上传

    网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。

    struts2 文件上传源码

    在Struts2中,实现文件上传涉及多个组件和技术。以下是关于"Struts2 文件上传源码"的相关知识点: 1. **.struts2的动作类(Action Class)**:在Struts2中,文件上传通常通过自定义Action类来处理。Action类是业务...

    基于Struts2的文件上传下载功能的完整源代码。

    在Struts2中,你需要配置`struts.xml`文件来启用文件上传插件,并指定允许的最大文件大小、存储路径等参数。 在Action类中,`upload()`方法接收上传的文件,并使用`FileItem`接口来处理每个部分。`FileItem`对象...

    Struts2实现文件上传

    在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库,这是一个专门用于处理HTTP多部分请求(multipart/form-data)的工具。以下是一些关键知识点: 1. **配置Struts2插件**: 首先,需要在Struts2的...

    Struts2实现上传功能源码

    在Struts2中,实现文件上传主要涉及以下几个步骤: 1. **配置Struts2核心过滤器**:在web.xml中配置`struts2-convention-plugin`或`struts2-core`过滤器,确保Struts2能够处理请求。 2. **创建上传表单**:HTML...

Global site tag (gtag.js) - Google Analytics