JavaWeb中struts2实现文件上传下载功能实例解析

JavaWeb中struts2实现文件上传下载功能实例解析

在JavaWeb应用中,实现文件的上传下载是很常见的需求。而在struts2框架中,实现文件的上传下载也并不难。本文将详细介绍struts2框架中如何实现文件上传下载的功能。

1. 文件上传实现

在struts2框架中,文件上传的实现需要用到Commons-FileuploadCommons-Io两个Jar包。以下是文件上传的实现步骤:

  1. pom.xml中导入以下两个依赖:
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
  1. 在struts.xml中配置文件上传的interceptor和action:
<interceptors>
     <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
     <interceptor-stack name="myStack">
         <interceptor-ref name="defaultStack"/>
         <interceptor-ref name="fileUpload"/>
     </interceptor-stack>
</interceptors>
<action name="fileUploadAction" class="com.example.action.FileUploadAction" method="upload">
     <interceptor-ref name="myStack"></interceptor-ref>
     <result name="success">/success.jsp</result>
     <result name="error">/error.jsp</result>
</action>
  1. 在action类中实现upload()方法并处理文件上传:
public String upload() throws Exception {    
    List<File> fileUpload = new ArrayList<File>();
    List<String> fileUploadContentType = new ArrayList<String>();
    List<String> fileUploadFileName = new ArrayList<String>();

    for(int i=0; i<upload.size(); i++) {
        fileUpload.add(upload.get(i));                    
        fileUploadContentType.add(uploadContentType.get(i));
        fileUploadFileName.add(uploadFileName.get(i));
    }

    if(fileUpload != null && fileUpload.size() > 0) {
        for(int i=0; i<fileUpload.size(); i++) {
            File file = fileUpload.get(i); // 得到上传的文件
            String fileName = fileUploadFileName.get(i); // 得到上传的文件名
            InputStream is = new FileInputStream(file);
            OutputStream os = new FileOutputStream(new File("C:\\fileuploads\\" + fileName));
            byte[] buffer = new byte[1024];
            int length = 0;
            while((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);                    
            }
            os.close();
            is.close();
        }
    }

    return SUCCESS;        
}

2. 文件下载实现

实现文件的下载同样需要用到Commons-Io Jar包。以下是文件下载的实现步骤:

  1. 在action类中实现download()方法:
public String download() throws Exception {
    File file = new File("C:\\fileuploads\\" + fileName);
    InputStream is = new FileInputStream(file);
    ServletActionContext.getResponse().setContentType("application/octet-stream");
    fileName = new String(fileName.getBytes(), "ISO8859-1"); // 解决中文文件名下载问题
    ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment;filename=" + fileName);
    ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while((len = is.read(buffer)) > 0) {
        os.write(buffer, 0, len);
    }
    is.close();
    os.close();
    return null;
}    
  1. 在struts.xml中配置download()方法的action:
<action name="download" class="com.example.action.FileUploadAction" method="download">
    <result name="success" type="stream">
        <param name="contentType">application/octet-stream</param>
        <param name="inputName">inputStream</param>
        <param name="contentDisposition">attachment;filename=${fileName}</param>
        <param name="bufferSize">1024</param>
    </result>
</action>

3. 示例

以下是一个简单的示例,首先是上传文件:

<form action="fileUploadAction.action" method="post" enctype="multipart/form-data">
    <input id="upload" name="upload" type="file" multiple="multiple"/> 
    <input type="submit" value="上传"/>
</form> 

上传成功后,可以在页面上看到上传的文件名,点击文件名可以下载上传的文件:

<a href="/download.action?fileName=${fileName}">${fileName}</a>

以上就是struts2中实现文件上传下载功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb中struts2实现文件上传下载功能实例解析 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Mybatis Interceptor 拦截器的实现

    Mybatis Interceptor 拦截器是Mybatis框架使用的一种插件机制,可以拦截Sql语句执行的过程,对Sql进行加工或者做其他处理,比如增加动态SQL条件、查询性能优化等。以下是Mybatis Interceptor 拦截器的完整实现攻略: Mybatis Interceptor 拦截器的实现步骤 步骤1:定义自定义Interceptor类 …

    Java 2023年5月20日
    00
  • Java图形化界面设计之容器(JFrame)详解

    Java图形化界面设计之容器(JFrame)详解 1. 容器的概念 在Java图形化界面设计中,容器指的是能够包含其他可视组件(如按钮、文本框等)的组件。容器可以是顶层容器(如JFrame、JDialog等)或内部容器(如JPanel、JTabbedPane等)。 JFrame是一个非常常用的顶层容器,它是Java AWT中的Frame类的一个子类,在Swi…

    Java 2023年5月23日
    00
  • Spring @Cacheable redis异常不影响正常业务方案

    Spring提供了基于注解的缓存机制,其中@Cacheable就是其中之一,它可以将方法返回值缓存起来,下次使用时直接获取缓存值而不再执行方法体。当然,@Cacheable也支持多种缓存源,其中Redis就是其中之一。 在使用Spring @Cacheable结合Redis进行缓存时,我们需要考虑如何解决Redis出现异常并且不影响我们正常业务的方案。下面是…

    Java 2023年5月27日
    00
  • springboot之配置双kafka全过程

    下面是Spring Boot配置双Kafka全过程的攻略: 1. 添加Kafka依赖 在pom.xml文件中添加以下Kafka依赖: <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</ar…

    Java 2023年5月20日
    00
  • 详解Java中自定义注解的使用

    下面是详解Java中自定义注解的使用的完整攻略。 什么是注解 注解是Java语言中的元数据,是JDK5.0版本以后新增的特性。它可以为Java代码提供额外的信息,被用于代码的分析、编译和运行时的处理等操作。注解本身不会对代码的逻辑产生影响,它只是提供了额外的元数据信息,使得程序员可以在代码上进行更精细的控制。 自定义注解的基本结构 自定义注解定义格式位于Ja…

    Java 2023年5月26日
    00
  • Java后端对接微信支付(小程序、APP、PC端扫码)包含查单退款

    Java后端对接微信支付攻略 1. 准备工作 在开始对接微信支付之前,我们需要准备一些材料: 商户号(mchId)和商户的API密钥(apiKey),在微信支付商户平台中获取。 在微信支付平台中创建支付应用,获取应用ID(appId)和应用密钥(appSecret)。 2. 配置微信支付参数 在项目中添加微信支付相关的配置,这个配置需要存储在项目的配置文件中…

    Java 2023年5月23日
    00
  • Java语言打印九九乘法表

    Java语言打印九九乘法表可以有多种实现方式,以下给出两种示例说明: 使用双重循环 代码示例: public class MultiplicationTable { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <…

    Java 2023年5月26日
    00
  • java:程序包org.apache.ibatis.annotations不存在报错解决

    如果在使用MyBatis时出现“java:程序包org.apache.ibatis.annotations不存在”的报错,原因可能是缺乏MyBatis-annotations的依赖或版本不匹配。为了解决这个问题,可以按照以下步骤进行操作: 步骤一、添加MyBatis-annotations依赖 打开项目的pom.xml文件,查看是否添加了MyBatis-an…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部