struts2文件下载

来源:互联网 发布:遭受网络攻击 损失 编辑:程序博客网 时间:2024/06/07 05:35
在web中,有文件上传,就必定有文件下载。使用struts2编写问加你下载程序时,需要在struts.xml中配置一个stream类型的结果映射,该结果类型包含以下四个属性:
1、contentType:指定下载文件的文件类型。这里的文件类型与因特网MIME标准中的规定类型要一致,例如:text/plain代表纯文本,text        /xml表示xml文件,image/gif代表GIF图片。
2、InputStream:指定下载文件的入口输入流。如果下载文件入口输入流为getTargetFile()方法,则必须指定该属性的值是targetFile。
3、contentDisposition: 指定文件下载的处理方式,包括两种方式:内联(inline)和附件(attachment)。内联方式表示浏览器会尝试          直接显示文件,附件方式会弹出“文件保存”对话框。其默认值是inline。

4、bufferSize:指定下载文件时的缓冲大小,其默认值是1024


实现文件下载功能代码(在文件上传的基础上实现):
文件下载页面(即:上传文件成功时显示所有文件的页面):success.jsp:

<h2>上传成功界面</h2>上传者:${uname}<table border="1" cellpadding="0" cellspacing="0" width="50%"><tr><td>上传文件</td><td>上传时间</td></tr><s:iterator status="st" value="uploadFileName"><tr><td><a href="DocDownLoadAction!downLoadFile.action?downPath=upload/<s:property value="uploadFileName[#st.getIndex()]" />"><s:property value="uploadFileName[#st.getIndex()]" /></a></td><td><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss" /></td></tr></s:iterator></table>

文件下载处理的Action:DocDownLoadAction.java:

package com.web.action;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.struts2.ServletActionContext;//文件下载的action@SuppressWarnings("serial")public class DocDownLoadAction extends BaseAction {// 下载文件的文件位置private String downPath;@SuppressWarnings("unused")public InputStream getInputStream() throws Exception {// 获取处理了中文乱码后的文件名称String realPath = this.getDownLoadFileName();// 返回InputStream流方法return ServletActionContext.getServletContext().getResourceAsStream(realPath);}// 文件名转换编码,防止中文乱码public String getDownLoadFileName() {String downFileName = null;try {// 处理URL后面挂的参数的中文乱码downFileName = new String(downPath.getBytes("ISO8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return downFileName;}public String downLoadFile() {System.out.println(ServletActionContext.getServletContext().getResourceAsStream(downPath));return SUCCESS;}public String getDownPath() {return downPath;}public void setDownPath(String downPath) {this.downPath = downPath;}}

struts.xml配置:

<!-- 文件下载的action配置 --><action name="DocDownLoadAction" class="com.web.action.DocDownLoadAction"><result type="stream" name="success"> <!-- 指定结果类型为stream --><param name="contentType"> <!-- 指定下载文件的文件类型 -->application/msword,text/plain,application/vnd.ms-powerpoint,application/vnd.ms-excel</param><param name="inputName">inputStream</param> <!-- 指定下载文件的入口输入流 --><param name="contentDisposition"> <!-- 指定下载文件的处理方式与文件保存名 -->attachment;filename="${downLoadFileName}"</param><param name="bufferSize">40960</param> <!-- 指定下载文件的缓冲区大小 --></result></action>
实现效果: