Struts 文件的上传与下载

实现原理

Struts 2是通过Commons FileUpload文件上传。

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

具体实现:

一、创建index.jsp页面

 1 <body>
 2  <s:form action="upload" method="post" theme="simple" enctype="multipart/form-data">
 3 <table align="center" width="50%" border="1">
 4 <tr>
 5         <td>选择上传文件</td>
 6         <td id="more">
 7             <s:file name="file"></s:file>
 8             <input type="button" value="Add More.." onclick="addMore()">
 9         </td>
10  </tr>
11 <tr>
12         <td><s:submit type="button" value="submit" onclick="return checkf()"/></td>
13         <td><s:reset value="reset "></s:reset></td>
14     </tr>
15 </table>
16 <table align="center" width="50%" border="1">
17 <tr>
18 <td>测试.txt</td>
19 <td>
20      <a href="<s:url value=‘download.action‘><s:param name=‘fileName‘>测试.txt</s:param> </s:url>">下载</a>
21 </td>
22 </tr>
23 </table>
24 </s:form>
25 </body>

  创建result.jsp页面

 1 <body>
 2 <s:form>
 3     <div style="border:1px solid black">成功上传的文件:<br>
 4         <ul style="list-style-type:decimal">
 5     <s:iterator value="#request.fileName" id="file" status="status">
 6             <li><s:property/> </li>
 7     </s:iterator>
 8         </ul>
 9     </div>
10 </s:form>
11 </body>

当然别忘了在每个页面上都添加上struts2 标签引用<%@taglib prefix="s" uri="/struts-tags" %>

二、创建updown.js文件,在index.jsp中引用

 1 function checkf(){
 2     var files =    document.getElementsByName("file");
 3     if(files[0].value.length!=0){
 4             return true;
 5      }else{
 6         alert("请选择文件");
 7         return false;
 8      }
 9 }
10 function addMore()
11 {
12    var td = document.getElementById("more");
13     var br = document.createElement("br");
14     var input = document.createElement("input");
15     var button = document.createElement("input");
16     input.type = "file";
17     input.name = "file";
18     button.type = "button";
19     button.value = "Remove";
20      button.onclick = function()
21     {
22         td.removeChild(br);
23         td.removeChild(input);
24         td.removeChild(button);
25     }
26       td.appendChild(br);
27     td.appendChild(input);
28     td.appendChild(button);
29 }

三、创建upDownloadAction.java

  1 package com.action;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.InputStream;
  8 import java.io.OutputStream;
  9 import java.io.UnsupportedEncodingException;
 10 import java.util.List;
 11 import javax.servlet.http.HttpServletRequest;
 14 import com.opensymphony.xwork2.ActionSupport;
 15 import org.apache.struts2.ServletActionContext;
 16
 17 public class UpDownloadAction extends ActionSupport {
 18
 19     private static final long serialVersionUID = 1L;
 20     private List<File> file;// 对应jsp中file标签
 21     private List<String> fileFileName;//
 22     private List<String> fileContentType;//
 23     private String fileName;//获得jsp中pram参数
 24     @SuppressWarnings("deprecation")
 25     // 文件上传
 26     public String uploadFiile() throws Exception {
 27         String root = ServletActionContext.getServletContext().getRealPath(
 28                 "/upload");// 上传路径
 29         System.out.println(root);
 30         InputStream inputStream;
 31         File destFile;
 32         OutputStream os;
 33         for (int i = 0; i < file.size(); i++) {
 34             inputStream = new FileInputStream(file.get(i));
 35             destFile = new File(root, this.getFileFileName().get(i));
 36             os = new FileOutputStream(destFile);
 37             byte[] buffer = new byte[400];
 38             int length = 0;
 39             while ((length = inputStream.read(buffer)) > 0) {
 40                 os.write(buffer, 0, length);
 41             }
 42             inputStream.close();
 43             os.close();
 44         }
 45         HttpServletRequest request = ServletActionContext.getRequest();
 46         request.setAttribute("fileName", fileFileName);
 47         return SUCCESS;
 48     }
 49
 50     // 文件下载
 51     public InputStream getDownloadFile() throws FileNotFoundException,
 52             UnsupportedEncodingException {
 53         System.out.println(getFileName());
 54
 55         // 如果下载文件名为中文,进行字符编码转换
 56         ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;fileName="
 57                         + java.net.URLEncoder.encode(fileName, "UTF-8"));
 58         InputStream inputStream = new FileInputStream("F:/"  //使用绝对路径 ,从该路径下载“测试.txt"文件
 59                 + this.getFileName());
 60         System.out.println(inputStream);
 61         return inputStream;
 62     }
 63
 64     // 下载
 65     public String downloadFile() throws Exception {
 66         return SUCCESS;
 67     }
 68
 69     public String getFileName() throws UnsupportedEncodingException {
 70         return fileName;
 71     }
 72
 73     public void setFileName(String fileName)
 74             throws UnsupportedEncodingException {
 75         this.fileName = new String(fileName.getBytes("ISO8859-1"), "utf-8");
 76     }
 77  }

注:属性的 get和set方法已省略。

四、最后是配置文件

1、web.xml配置

1     <filter>
2         <filter-name>struts2</filter-name>
3         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
4     </filter>
5
6     <filter-mapping>
7         <filter-name>struts2</filter-name>
8         <url-pattern>/*</url-pattern>
9     </filter-mapping> 

2、struts.xml配置

 1 <struts>
 2    <constant name="struts.i18n.encoding" value="utf-8"></constant>
 3    <constant name="struts.multipart.saveDir" value="f:\"></constant>
 4    <package name="struts2" extends="struts-default">
 5        <action name="upload" class="com.action.UpDownloadAction" method="uploadFiile">
 6            <result name="success">/jsp/result.jsp</result>
 7            <interceptor-ref name="fileUpload">
 8 <!--maximumSize (可选) - 这个拦截器允许的上传到action中的文件最大长度(以byte为单位).
 9     注意这个参数和在webwork.properties中定义的属性没有关系,默认2MB-->
10                 <param name="maximumSize">409600</param>
11 <!--allowedTypes (可选) - 以逗号分割的contentType类型列表(例如text/html),
12 这些列表是这个拦截器允许的可以传到action中的contentType.如果没有指定就是允许任何上传类型.-->
13                 <param name="allowedTypes">
14                     text/plain
15                 </param>
16             </interceptor-ref>
17             <interceptor-ref name="defaultStack"></interceptor-ref>
18        </action>
19        <action name="download" class="com.action.UpDownloadAction" method="downloadFile" >
20             <result name="success" type="stream">
21             <!--指定文件下载类型     application/octet-stream默认值可以下载所有类型    -->
22                 <param name="contentType">
23                     application/txt;
24                 </param>
25             <!-- 指定下载的文件名和显示方式 ,但注意中文名的乱码问题,解决办法是:进行编码处理-->
26             <!--contentDisposition是文件下载的处理方式,包括内联(inline)和附件(attachment),
27             默认是inline, 使用附件时这样配置:attachment;filename="文件名" 。-->
28                 <param name="contentDisposition">
29                   attachment;filename="${fileName}"
30                 </param>
31             <!--由getDownloadFile()方法获得inputStream-->
32                 <param name="inputName">downloadFile</param>
33 <!--                指定下载文件的缓存大小-->
34                 <param name="bufferSize">2048</param>
35             </result>
36         </action>
37    </package>
38 </struts>  

一个简单的Struts2的多文件文件上传和单文件下载就实现了

时间: 2025-01-07 03:56:53

Struts 文件的上传与下载的相关文章

struts—文件的上传和下载

设计了一个小的案例:上传图片到服务器,上传成功后显示图片列表,然后点击下载上传到服务器的图片. 文件上传: 注意表单的配置属性: <form enctype="multipart/Form-data" action="/strutsFilleupAndDown/register.do" method="post"> 名字:<input type="text" name="name">

struts中文件的上传和下载

首先我们还是新建一个新的web project 取名为upload_test 然后在WebRoot中新建两个jsp页面 upload.jsp 和result.jsp 代码分别如下: upload.jsp Jsp代码   <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getCont

struts2实现文件的上传和下载

文件的上传和下载需要两个jar包  commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar JSP页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans

使用Loadrunner进行文件的上传和下载

最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncTy

【Linux命令】--(4)文件打包上传和下载

文件打包上传和下载 +++++++++++++++++++++++++++++++用SecureCRT来上传和下载文件tar命令gzip命令+++++++++++++++++++++++++++++++先把计划放着,待老夫国庆把它学完!

【php】文件的上传与下载

一. 生活中常见的地方: a) 例如邮箱.空间.文库.百度云.微爱等地方,都可以看到文件的上传和下载的应用,因此,上传和下载的功能非常重要!二. PHP当中的文件上传和下载 a) 我们需要进行一些设置,来使我们的表单具有提交文件的功能! b) 客户端的设置: i. 其实就是表单的设置: 1. input表单项中的type属性值必须是file类型 2. form表单头部需要添加一个通行证:enctype="multipart/form-data",含义为让服务器认识到我们要在这个表单中上

SpringMVC实现文件的上传和下载

前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流".我回复他说:"使用SpringMVC框架可以做到这一点,因为SpringMVC为文件的上传提供了直接的支持,但需要依赖Apache提供Commons FileUpload组件jar包."鉴于这个问题,我上网也百度了一下,网上很多都是介绍的使用IO流来实现文件的上传和下载,也有说到框架的,但介绍的并不是很完整,今天小钱将和大家介绍使用Spr

SecureCRT使用sz和rz命令进行文件的上传和下载

SecureCRT可以使用sz和rz命令进行文件的上传和下载. sz文件下载: 格式:sz 文件名称 即可将服务器的文件下载至本地. rz文件上传: 格式:rz 文件名称 即可将本地文件上传至服务器. 本地文件夹可以通过Options-->Session Options中进行设置.

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc