最近项目中需要提供文件下载功能,思路是在项目中放一份Excel模板,然后直接找到路径下载,这也是一个不错的思路,就不用通过POI写代码来实现一个Excel模板啦。记录一下配置及代码
struts.xml文件配置:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="support_downfile" namespace="/support" extends="base-default"> <action name="download" class="cn.com.demo.DownloadFileAction"> <result name="success" type="stream"> <param name="contentType">application/octet-stream;charset=UTF-8</param> <param name="inputName">inputStream</param> <param name="contentDisposition">filename="${shortName}"</param> <param name="bufferSize">4096</param> </result> </action> </package> </struts> |
java代码:
public class DownloadFileAction extends BaseAction { private String fileName; private String shortName; public DownloadFileAction() { } public String getFileName() { return this.fileName; } public String getShortName() { return this.shortName; } public void setFileName(String fileName) { this.shortName = fileName.substring(fileName.lastIndexOf("/") + 1); this.fileName = URLDecoder.decode(fileName, "UTF-8"); } public InputStream getInputStream() { try { if(this.fileName.equals("/WEB-INF/lib/webroot.tmp")) { String path = ServletActionContext.getServletContext().getRealPath("/"); IOUtil.delFile(path + "WEB-INF\\lib\\webroot.tmp"); ZipUtil.zip(path + "WEB-INF\\lib\\webroot.tmp", path); } return ServletActionContext.getServletContext().getResourceAsStream(this.fileName); } catch (Exception var2) { ServletActionContext.getResponse().setStatus(500); return null; } } public String execute() { return "success"; } } |
前端只需要要传一个fileName就可以下载:
function downloadFile(){ var url="${ctx}/support/download.action?fileName="+encodeURI(encodeURI("/base/jsp/orgbatchimport/importPersonOrg_Demo.xls")); window.open(url); return; } |