struts 文件上传下载

上传

1、编写上传action类 UploadAction.java

 1 package jxf.b_upload;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5
 6 import javax.servlet.http.HttpServletRequest;
 7
 8 import org.apache.commons.io.FileUtils;
 9 import org.apache.struts2.ServletActionContext;
10
11 public class UploadAction {
12     public File file01;//上传的文件  --对应表单中的<input type="file" name="file01"> name的值
13     public String file01FileName;//上传文件的文件名    --表单中name的值+FileName
14     public String file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType
15
16     public void setFile01(File file01) {
17         this.file01 = file01;
18     }
19
20     public void setFile01FileName(String file01FileName) {
21         this.file01FileName = file01FileName;
22     }
23
24     public void setFileContentType(String file01ContentType) {
25         this.file01ContentType = file01ContentType;
26     }
27
28     /**
29      * 上传
30      * @return
31      */
32     public String upload() {
33         //处理文件   把文件上传到upload目录
34         try {
35             //创建目标文件
36             File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName);
37             //拷贝上传的文件到目标文件
38             FileUtils.copyFile(file01, destFile);
39             System.out.println("上传完成");
40         } catch (IOException e) {
41             e.printStackTrace();
42             throw new RuntimeException(e);
43         }
44         return "success";
45     }
46 }

2、配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- struts默认的上传文件大小限制是2M,可通过常量的配置来改变 -->
    <constant name="struts.multipart.maxSize" value="10485760"></constant>
    <package name="upload_" extends="struts-default">
        <action name="uploadTest" class="jxf.b_upload.UploadAction" method="upload">
            <!-- 限制运行上传的文件的类型 -->
            <interceptor-ref name="defaultStack">
                <!-- 限制运行的文件的扩展名
                <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
                 -->
                <!-- 限制运行的类型   【与上面同时使用,取交集】
                <param name="fileUpload.allowedTypes">text/plain</param>
                -->
            </interceptor-ref>
            <!-- 错误视图 -->
            <result name="input">/error.jsp</result>
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

3、前台jsp页面

  <body>
    <form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
        <input type="file" name="file01">
        <input type="submit" value="上传">
    </form>
  </body>

如果是多文件上传,可以使用同名的<input type="file" name="">标签,并在action处理类中用数组接收(当然也可以用不同的name值,并用对应的字段接收),然后遍历处理

 1 public class UploadAction {
 2     public File[] file01;//上传的文件  --对应表单中的<input type="file" name="file01"> name的值
 3     public String[] file01FileName;//上传文件的文件名    --表单中name的值+FileName
 4     public String[] file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType
 5
 6     public void setFile01(File[] file01) {
 7         this.file01 = file01;
 8     }
 9
10     public void setFile01FileName(String[] file01FileName) {
11         this.file01FileName = file01FileName;
12     }
13
14     public void setFileContentType(String[] file01ContentType) {
15         this.file01ContentType = file01ContentType;
16     }
17
18     /**
19      * 上传
20      * @return
21      */
22     public String upload() {
23         //处理文件   把文件上传到upload目录
24         try {
25             //创建目标文件
26             for (int i = 0; i < file01.length; i++) {
27                 File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName[i]);
28                 //拷贝上传的文件到目标文件
29                 FileUtils.copyFile(file01[i], destFile);
30                 System.out.println("上传完成");
31             }
32
33         } catch (IOException e) {
34             e.printStackTrace();
35             throw new RuntimeException(e);
36         }
37         return "success";
38     }
39 }
<form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
        <input type="file" name="file01">
        <input type="file" name="file01">
        <input type="file" name="file01">
        <input type="submit" value="上传">
    </form>

下载:

1、编写下载acton类 DownAction.java

 1 package jxf.b_upload;
 2
 3 import java.io.File;
 4 import java.io.InputStream;
 5 import java.io.UnsupportedEncodingException;
 6 import java.net.URLEncoder;
 7 import java.util.Map;
 8
 9 import org.apache.struts2.ServletActionContext;
10
11 import com.opensymphony.xwork2.ActionContext;
12
13 public class DownAction {
14
15     /**
16      * 1. 显示所有要下载文件的列表
17      * @return
18      */
19     public String list(){
20         //获取所有要下载的文件
21         File file = new File(ServletActionContext.getServletContext().getRealPath("/upload"));
22         String[] fileNames = file.list();//所有文件名
23         ActionContext ac =  ActionContext.getContext();
24         Map<String,Object> request = ac.getContextMap();
25         request.put("fileNames", fileNames);//将文件名放入request
26         return "list";
27     }
28
29     /*************2. 文件下载*********************/
30     // 1. 获取要下载的文件的文件名
31     private String fileName;//对应提交的参数名
32     public void setFileName(String fileName) {
33         // 处理传入的参数中问题(get提交)
34         try {
35             fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
36         } catch (UnsupportedEncodingException e) {
37             throw new RuntimeException(e);
38         }
39         // 把处理好的文件名,赋值
40         this.fileName = fileName;
41     }
42
43     //2. 下载提交的业务方法 (在struts.xml中配置返回stream)
44     public String down() throws Exception {
45         return "success";
46     }
47
48     // 3. 返回文件流的方法
49     public InputStream getAttrInputStream(){
50         return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
51     }
52
53     // 4. 下载显示的文件名(浏览器显示的文件名)
54     public String getDownFileName() {
55         // 需要进行中文编码
56         try {
57             fileName = URLEncoder.encode(fileName, "UTF-8");
58         } catch (UnsupportedEncodingException e) {
59             throw new RuntimeException(e);
60         }
61         return fileName;
62     }
63
64 }

2、配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="down_" extends="struts-default">
        <action name="downlist" class="jxf.b_upload.DownAction" method="list">
            <result name="list">/down.jsp</result>
        </action>
        <action name="down_down" class="jxf.b_upload.DownAction" method="down">
            <result name="success" type="stream">
               <!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
               <param name="contentType">application/octet-stream</param>
               <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
               <param name="inputName">attrInputStream</param>
               <!-- 下载头,包括:浏览器显示的文件名  ${downFileName},${}为struts中的取值符,downFileName对应getDownFileName()-->
               <param name="contentDisposition">attachment;filename=${downFileName}</param>
               <!-- 缓冲区大小设置 -->
               <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>

3、下载列表jsp

  <body>
    <table border="1" align="center">
        <tr>
            <td>序号</td>
            <td>文件名</td>
            <td>操作</td>
        </tr>
        <c:forEach var="item" items="${fileNames}" varStatus="sta">
            <tr>
                <td>${sta.count}</td>
                <td>${item}</td>
                <td>
                    <c:url var="url" value="down_down">
                        <c:param name="fileName" value="${item}"></c:param>
                    </c:url>
                    <a href="${url}">下载</a>
                </td>
            </tr>
        </c:forEach>
    </table>
  </body>

下载编写方式比较特殊,并不容易记忆,此处记录方便以后用到查阅。

时间: 2024-12-25 04:24:17

struts 文件上传下载的相关文章

Struts文件上传下载

Struts配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>

ssh框架文件上传下载

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Author" content="BuNuo"> <meta name="Keywords" content="文件上传下载"> <meta name="

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

基于Java的一个简单的文件上传下载功能

最近在公司给客户端做接口,有一个图片上传和文件下载的功能,本来想用Struts来做文件上传下载,但是看了下公司好像没有这个配置,然后看了下同事的代码,才发现原来Apache也可以简单的实现文件上传下载. 首先引入commons-io-2.2.jar FileUtils为我们提供了很多对文件的操作的方法,比如上传整个文件夹的文件.上传单个文件等 然后请看代码下载: public static void uploadFile(String targetDirectory,String targetF

【SSH2(实践篇)】--Struts2文件上传下载实例

上篇文章又一次回顾了Struts2的运行机制,对它的运行步骤做了一步步的解析,这个解析不但再一次理清了Struts2的使用方法,而且对它的映射机制进行了深入的解析,并在最后通过一个实例来介绍了Struts2的一种使用方法,这里将做一个有关文件上传下载的实例. 一.文件上传 Struts2并没有提供文件上传的组件,所以想要实现上传的功能就必须通过第三方组件来实现,在Struts2引用的jar中包含了文件上传的组件,它是通过commons-fileupload.jar和commons-io.jar来

文件上传(多文件上传)/下载

通常我们会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就文件下载和多文件上传的源代码进行一下讲 文件上传 首先先创建jsp页面(用于多文件上传) <%@ page language="java" import="java.util.

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

转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件

struts2 实现文件上传下载 (下载支持中文文件名)代码

struts2 实现文件上传: Action 代码: package com.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import com.o

JavaWeb实现文件上传下载功能实例解析 (好用)

转: 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上