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日

相关文章

  • java单例五种实现模式解析

    Java单例五种实现模式解析 什么是单例模式? 单例模式是指一个类只能被实例化一次,并且全局都可以访问到这个实例。在实际开发中,很多情况下我们只需要一个实例,例如全局配置信息、日志管理等等,这时候使用单例模式可以节省系统资源,减少不必要的开销。 单例模式的特点 保证一个类只有一个实例。 提供一个访问该实例的全局入口。 不能被其他对象实例化。 五种实现模式 1…

    Java 2023年5月26日
    00
  • c#和java base64不一致的解决方法

    下面是关于“c#和java base64不一致的解决方法”的完整攻略,介绍如何解决c#和Java在base64编码上的差异问题。 问题背景 在编写应用程序时,我们经常需要将一些数据进行加密或者传输,在这个过程中,经常会用到base64编码。然而,尽管c#和Java都有对应的base64编解码方法,但是两种语言在实现上略有区别,这就导致了c#和Java在使用相…

    Java 2023年5月19日
    00
  • 强烈推荐MyBatis 三种批量插入方式的比较

    背景介绍 在数据处理方面,批量插入是优化数据处理效率的一个有效手段。MyBatis 也提供了三种批量插入的方式,分别是 foreach 元素、SQL 语句拼接、BatchExecutor 执行器,其中 BatchExecutor 是官方推荐使用的方式。本文将对三种方式进行比较分析,帮助读者更好地选择使用合适的方式。 三种方式比较 2.1 foreach 元素…

    Java 2023年5月20日
    00
  • Java实现简易Web服务器

    Java实现简易Web服务器 概述 Web服务器是Web应用程序运行的基础设施之一。本文将介绍如何使用Java编程语言实现一个简单的Web服务器,并提供两个简单的示例说明,帮助理解如何使用此Web服务器。 实现流程 获取客户端请求,解析请求报文,获取客户端请求的资源路径和参数。 判断客户端请求所需资源的类型,是静态资源还是动态资源。 如果是静态资源,则根据资…

    Java 2023年5月18日
    00
  • 教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)

    以下是使用Idea搭建SSM框架的详细教程,包括Spring、Spring MVC和MyBatis三个框架的整合。 环境准备 在开始之前,需要确保以下环境已经准备好: JDK 1.8或以上版本 Maven 3.0或以上版本 Tomcat 8.0或以上版本 IntelliJ IDEA 2018或以上版本 创建Maven项目 打开IntelliJ IDEA,选择…

    Java 2023年5月18日
    00
  • 关于Struts2文件上传与自定义拦截器

    关于Struts2文件上传与自定义拦截器的完整攻略 文件上传 环境配置 在使用Struts2进行文件上传之前,需要进行相关的环境配置。首先需要在struts.xml文件中配置org.apache.struts2.dispatcher.multipart.MultiPartRequest类型的解析器: <constant name="strut…

    Java 2023年5月20日
    00
  • IDEA导入外部项目报Error:java: 无效的目标发行版: 11的解决方法

    当使用IntelliJ IDEA导入外部Java项目时,可能会遇到以下错误: Error:java: 无效的目标发行版: 11 这个错误是由于项目使用了Java 11,而你的IntelliJ IDEA默认的Java版本较低,因此需要将Java版本配置为11或更高版本才能正确导入项目。 要解决这个问题,可以按照以下步骤进行操作: 步骤一:安装Java 11 首…

    Java 2023年5月20日
    00
  • Java回调函数实例代码详解

    Java回调函数实例代码详解 什么是回调函数 回调函数是指函数在程序执行时由另外一个函数动态引用或调用的一种机制。具体而言,如果一个函数可以接受另一个函数作为参数,或者将其指定为某个事件处理器,那么这个被接受的函数就叫做回调函数。回调函数是异步编程中非常重要的一个工具,可以帮助我们编写出高效、易于维护的程序。 回调函数的用途 回调函数通常有两个用途: 事件处…

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