`

Struts2文件上传(转)

阅读更多
Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传,所需的jar包如下:

commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-io-1.3.1.jar
commons-fileupload-1.2.jar

★ 文件上传页面 fileupload.jsp

<%@ page language="java" contentType="text/html; charset=GBK"%>   
<%@ taglib prefix="s" uri="/struts-tags" %>   
   
<html>   
  <head>   
  <head>   
      
  <body>   
    <s:form action="fileUpload" method="post" enctype="multipart/form-data">   
      <s:file name="doc" label="File"/>   
      <s:submit/>   
    <s:form>   
  <body>   
<html>  

这里需要注意的是,form的enctype属性必须设置为multipart/form-data。
★ 处理文件上传 FileUploadAction.java

package fileupload;    
   
import java.io.File;    
import java.text.DateFormat;    
import java.text.SimpleDateFormat;    
import java.util.Date;    
import java.util.Random;    
   
import javax.servlet.ServletContext;    
   
import org.apache.commons.io.FileUtils;    
import org.apache.struts2.util.ServletContextAware;    
   
import com.opensymphony.xwork2.ActionSupport;    
   
public class FileUploadAction extends ActionSupport implements ServletContextAware {    
        
    private static final long serialVersionUID = -5016873153441103539L;    
        
    private File doc;    
    private String fileName;    
    private String contentType;    
        
    private ServletContext context;    
            
    public void setDoc(File file) {    
        this.doc = file;    
    }    
        
    public void setDocFileName(String fileName) {    
        this.fileName = fileName;    
    }    
        
    public void setDocContentType(String contentType) {    
        this.contentType = contentType;    
    }    
        
    public void setServletContext(ServletContext context) {    
        this.context = context;    
    }    
        
    public String execute() throws Exception {    
        String targetDirectory = context.getRealPath("/upload");    
        String targetFileName = generateFileName(fileName);    
        File target = new File(targetDirectory, targetFileName);    
            
        FileUtils.copyFile(doc, target);    
            
        return SUCCESS;    
    }    
        
    private String generateFileName(String fileName) {    
        DateFormat format = new SimpleDateFormat("yyMMddHHmmss");    
        String formatDate = format.format(new Date());    
            
        int random = new Random().nextInt(10000);    
            
        int position = fileName.lastIndexOf(".");    
        String extension = fileName.substring(position);    
            
        return formatDate + random + extension;    
    }       
}  

在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="fileupload" namespace="/fileupload" extends="struts-default">   
            
        <action name="fileUpload" class="fileupload.FileUploadAction">   
            <result>/fileupload/upload_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>   
分享到:
评论

相关推荐

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    struts2实现文件上传下载

    首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List&lt;FileInfo&gt;`类型的字段,用于接收上传的文件...

    struts2文件上传jar

    这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    struts2文件上传实例

    1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`&lt;result&gt;`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...

    Struts2之struts2文件上传详解案例struts011

    在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....

    struts2文件上传

    Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...

    struts2 文件上传

    struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload

    java struts2 文件上传 支持大文件

    Java Struts2 文件上传是Java Web开发中常见的一项功能,特别是在处理大文件时,需要考虑性能和用户体验。Struts2框架提供了丰富的插件和配置来支持文件上传,其中包括进度条显示,以提升用户交互体验。以下是对这个...

    简单易懂的struts2文件上传

    在Struts2中,文件上传功能是一个常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。本教程将深入浅出地讲解如何在Struts2中实现文件上传,并提供一个简单的实例来帮助理解。 1. **Struts2文件上传概述...

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    struts2文件上传例子.rar

    在“struts2文件上传例子.rar”这个项目中,开发者已经使用Struts2.0框架实现了一个简单的文件上传功能。MyEclipse 6.6是一个集成开发环境,支持Java EE项目开发,可以直接导入该项目进行运行和调试。 首先,我们...

    Struts2文件上传源码

    6. **源码分析**: 要深入理解Struts2的文件上传机制,你需要查看Struts2的源码,特别是`org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest`和`org.apache.struts2.components.Form`这两个类。...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    JavaEE Struts文件上传

    2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`&lt;constant name="struts.multipart.parser...

    Struts2文件上传程序示例

    Struts2文件上传程序是一个典型的企业级Web应用开发中的功能,它允许用户通过网页将本地文件上传到服务器。Struts2作为一款强大的MVC(Model-View-Controller)框架,提供了丰富的功能支持,包括文件上传。这个示例...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    struts2 文件上传功能

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

Global site tag (gtag.js) - Google Analytics