struts2的单文件下载
2015-10-30 14:41
387 查看
一、 导入两个jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
二、编写请求上传jsp
三、编写action
四 、 配置struts.xml
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
二、编写请求上传jsp
<h1>文件列表--单文件</h1> <div> <span> <img alt="" src="/imgs/${fileFileName }" width="100"> </span> <a href="upload_download/download_file.action?filename=${fileFileName }">download</a> </div>
三、编写action
package com.struts2.fileuplad.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import com.struts2.util.BaseAware; public class FileDownloadAction extends BaseAware { private static final long serialVersionUID = 9084172624901427828L; private String filename; //该方法会被对应的请求action中result的参数调用 public String getFilename() { return filename ; } public void setFilename(String filename) throws UnsupportedEncodingException { this.filename = filename; } @Override public String execute() { return SUCCESS; } //该方法被对应的请求action中result的参数调用 //即:<param name="contentDisposition">attachment;fileName="${downloadFileName}"</param> public String getDownloadFileName() throws UnsupportedEncodingException{ //使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 // 构造一个新的 String,运用指定的字符集解码指定的字节数组。 //这里本该设置为UTF-8 但是IE依然显示乱码 换成GBK之后基本可以全部兼容了,有问题可以再修改 return this.filename = new String(filename.getBytes("GBK"),"ISO-8859-1"); } private HttpServletRequest request; public void setServletRequest(HttpServletRequest request) { this.request = request; } //该方法被对应的请求action中result的参数调用 //即:<param name="inputName">inputStream</param> public InputStream getInputStream() throws FileNotFoundException, UnsupportedEncodingException { String fileapath = request.getServletContext().getInitParameter("struts2_upload_imgs_path") ; File file = new File(fileapath + File.separator + filename); FileInputStream fis = new FileInputStream(file); return fis; } }
四 、 配置struts.xml
<!-- 其中主要使用的参数是: contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制 inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。 contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。 该项目中调用的是getDownloadFileName()方法 bufferSize 下载文件的缓冲大小 --> <action name="download_file" class="com.struts2.fileuplad.action.FileDownloadAction"> <result type="stream"> <param name="contentType">application/octet-stream</param> <param name="contentDisposition">attachment;fileName="${downloadFileName}"</param> <param name="inputName">inputStream</param> <param name="bufferSize">1024</param> </result> </action>
相关文章推荐
- java web开发--Servlet学习之HelloWorld 从部署到开发全过程
- JPA学习笔记-Spring整合JPA
- java script全选反选的实现
- NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
- java web上传文件保存的目录
- java连接mysql封装类
- MD5加密算法的java实现
- Java中的过滤器doFilter里的chain.doFilter()函数理解
- 杭电1047 An Easy Task - java 解读
- 时间格式化,时间戳生成等工具方法
- eclipse problems
- Java编程中外部类访问private成员方法
- Kotlin: Java 6 废土中的一线希望
- Netty4.x中文教程系列 ChannelHandler
- spring mvc和jdbcTemplate例子
- Spring项目搭建【简单】
- eclipse无法导出android签名包的问题
- Java bench - Simple and lightweight service load testing tool
- 杭电ACM_2015_JAVA
- Google 的 Java 编程风格指南