Struts2文件下载(灵活控制MIME、FILENAME)
2017-06-02 00:00
375 查看
下载流程概览:HttpRequest ---> DownloadAction ---> SUCCESS Result --> 输出流
说明:
在下载的Action中,必须有个InputStream类型的field和对应的get方法。
下载时方便,将文件名、MIMETYPE都写在了Action中。
解释说明:
为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。
为了能在HTTP Response中使用到MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。
STEP01 写一个DownloadAction
package study.action; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import javax.servlet.ServletContext; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport implements ServletContextAware { private static final long serialVersionUID = 1L; private ServletContext context; private String filename; private String mimeType; private InputStream inStream; @Override public String execute() throws Exception { mimeType = context.getMimeType(filename); return SUCCESS; } public InputStream getInStream() { inStream = context.getResourceAsStream("/doc/" + filename); if (inStream == null) { inStream = new ByteArrayInputStream("Sorry,File not found !" .getBytes()); } return inStream; } public String getMimeType() { return mimeType; } public void setFilename(String filename) { try { this.filename = new String(filename.getBytes("ISO8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { } } public String getFilename() { try { return new String(filename.getBytes(),"ISO8859-1"); } catch (UnsupportedEncodingException e) { return this.filename; } } @Override public void setServletContext(ServletContext context) { this.context = context; } }
说明:
在下载的Action中,必须有个InputStream类型的field和对应的get方法。
下载时方便,将文件名、MIMETYPE都写在了Action中。
STEP02 编写配置文件
<action name="download" class="study.action.DownloadAction"> <result type="stream"> <param name="contentType">${mimeType}</param> <param name="inputName">inStream</param> <param name="contentDisposition">attachment;filename="${filename}"</param> </result> </action>
解释说明:
为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。
为了能在HTTP Response中使用到MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。
相关文章推荐
- 【Struts2】中文文件的下载与下载权限的控制
- 理解和灵活应用 Struts2 的文件下载功能
- struts2的文件下载(1):下载前的授权控制
- 4.4.3: Struts2文件下载---下载前的授权控制
- Struts2 控制文件上传下载
- Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)
- 理解和灵活应用 Struts2 的文件下载功能
- 【Java EE (Struts2 + Spring + Hibernate)开发】:Struts2(二)之【控制文件上传和下载】
- 你能下载,他能下载吗?-----Struts2文件下载的权限控制(14)
- 使用struts2进行文件下载以及下载权限控制的例子
- Struts2控制文件下载
- 使用struts2进行文件下载以及下载权限控制的例子
- struts2控制文件上传和下载
- 使用Struts2控制文件下载
- Struts2控制文件下载
- struts2学习之---控制文件下载
- Struts2 控制文件上传下载
- Struts2 控制文件上传下载功能实例代码
- struts2 文件下载
- struts2文件下载