Struts2文件下载

来源:互联网 发布:道家经典软件 编辑:程序博客网 时间:2024/06/06 11:12

上一篇刚刚写了一个上传的,今天再来复习一下Struts2的文件下载

Struts2单多文件上传:http://blog.csdn.net/u012219290/article/details/45671657

简介:
struts的下载action与配置一个普通的action基本一致,主要的地方在于result的type配置为stream
stream类型的result配置主要需要四个属性:

contentType:
指定下载文件的文件类型,与互联网MIME标准中的规定类型一致HTTP Content-type
inputName:
指定下载文件入口输入流
contentDisposition:
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对
框,否则浏览器会尝试直接显示文件。取值为:attachment;filename=”struts.txt” ,表示文件下载的时候保存的名字应为
struts.txt 。如果直接写filename=”struts.txt” >那么默认情况是代表inline浏览器会尝试自动打开它,等价于这样的写法:
inline; filename=”struts.txt”
bufferSize:
指定下载文件时的缓冲大小

注意:inputName参数的配置必须对应action中返回流的get方法一致。
比如:

//配置为<param name="inputStream">inputStream</param>//对应action中的方法public InputStream getInputStream(){}

先看效果:

一.访问http://localhost:8080/Struts2Download/getFileNames.action获取可下载的文件列表

这里写图片描述

二.点击下载将对应文件保存到指定目录(图略)

工程的创建步骤和工程的目录与Struts2文件上传相同
这里直接上代码

1.struts.xml

<?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>    <!--将默认上传的文件大小改为500MB -->    <constant name="struts.multipart.maxSize" value="524288000" />    <!--编码-->    <constant name="struts.i18n.encoding" value="UTF-8" />    <!--开发模式-->    <constant name="struts.devMode" value="true" />    <package name="default" extends="json-default" namespace="/">        <!-- 文件下载  -->        <action name="fileDownload" class="action.DownloadAction">            <param name="filePath">upload</param>            <result name="success" type="stream">                <param name="contentType">application/octet-stream;charset=UTF-8</param>                <param name="inputName">inputStream</param>                <param name="contentDisposition">attachment;filename="${fileName}"</param>                <param name="bufferSize">4096</param>            </result>        </action>        <!--获取可下载的文件-->        <action name="getFileNames" class="action.DownloadAction" method="getFileNames">            <!--下载文件的目录-->            <param name="filePath">upload</param>            <result name="success">download.jsp</result>        </action>    </package></struts>

2.DownloadAction.java

package action;import java.io.File;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * Struts2文件下载 *  * @author Administrator *  */@SuppressWarnings("serial")public class DownloadAction extends ActionSupport {    private String fileName;// 文件名    private String filePath;// 文件存放的路径    private List<String> nameList = new ArrayList<String>();// 可下载的文件集    /**     * 获取所有可供下载的文件     * @return     */    public String getFileNames() {        String realPath = ServletActionContext.getServletContext().getRealPath(                File.separator + filePath);        File file = new File(realPath);        File[] files = file.listFiles();        for (File f : files) {            if (f.isFile()) {                nameList.add(f.getName());            }        }        return SUCCESS;    }    /**     * 文件传输流     * @return     * @throws Exception     */    public InputStream getInputStream() throws Exception {        InputStream input = ServletActionContext.getServletContext()                .getResourceAsStream(                        File.separator + filePath + File.separator + fileName);        //编码转换,防止页面显示文件名乱码。这里文件放在tomcat中,tomcat已经设置编码为utf-8        this.fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");        return input;    }    public String getFileName() {        return fileName;    }    public void setFileName(String fileName) {        this.fileName = fileName;    }    public String getFilePath() {        return filePath;    }    public void setFilePath(String filePath) {        this.filePath = filePath;    }    public List<String> getNameList() {        return nameList;    }    public void setNameList(List<String> nameList) {        this.nameList = nameList;    }}

3.download.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%String path = request.getContextPath();String basePath = request.getScheme() + "://"        + request.getServerName() + ":" + request.getServerPort()        + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>    <base href="<%=basePath%>">    <title>文件下载</title></head><body>    <table style="width: 50%;text-align:center" border="1">        <caption style="color:red;font-size:20px">文件列表</caption>        <tr style="background-color:#99CCCC">            <td>序号</td><td>文件名</td><td>操作</td>        </tr>        <c:forEach items="${nameList}" var="fileName" varStatus="status">            <tr>                <td>${status.count}</td>                <td>${fileName}</td>                <td>                    <a href="fileDownload.action?fileName=${fileName}">下载</a>                </td>            </tr>        </c:forEach>    </table></body></html>
0 0