首页 > 代码库 > struts2的文件下载
struts2的文件下载
public class DownloadAction extends ActionSupport{ // 接收文件名 private String filename; @Override public String execute() throws Exception { // 解决请求参数中文件名get乱码 filename = new String(filename.getBytes("ISO-8859-1"),"utf-8"); return SUCCESS; } public String getFilename() throws IOException { // 对文件名 进行编码,用于附件下载 String agent = ServletActionContext.getRequest().getHeader("user-agent"); System.out.println(agent); if(agent.contains("Firefox")){ // 火狐浏览器 Base64编码 return "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?="; }else{ // IE及其它浏览器--- URL编码 return URLEncoder.encode(filename, "utf-8"); } } public void setFilename(String filename) { this.filename = filename; } // getTargetFile方法名 因为配置 <param name="inputName">targetFile</param> public InputStream getTargetFile() throws IOException{ // 获得download 目录 绝对路径 ServletContext servletContext = ServletActionContext.getServletContext(); String downloadDir = servletContext.getRealPath("/download"); return new BufferedInputStream(new FileInputStream(new File(downloadDir, filename))); } // <param name="contentType">${contentType}</param> public String getContentType(){ // 文件类型 由文件名动态获得 ServletContext servletContext = ServletActionContext.getServletContext(); // 查找tomcat/conf/web.xml return servletContext.getMimeType(filename); } }
<package name="default" namespace="/" extends="struts-default"> <!-- 文件下载 --> <action name="download" class="cn.itcast.action.demo2.DownloadAction"> <!-- 返回 流结果 --> <result type="stream"> <!-- inputName 用于指定 返回输入流的方法名 默认值 inputStream --> <!-- targetFile 需要在Action 中提供 getTargetFile方法,返回值必须InputStream --> <param name="inputName">targetFile</param> <!-- 配置ContentType --> <!-- ${contentType}从Action中 getContentType 获得文件类型 --> <param name="contentType">${contentType}</param> <!-- 设置响应数据 以附件形式打开 --> <param name="contentDisposition">attachment;filename=${filename}</param> </result> </action> </package>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。