文档章节

Struts2文件下载(灵活控制MIME、FILENAME)

SPPan
 SPPan
发布于 2017/06/02 10:27
字数 298
阅读 6
收藏 0

下载流程概览:HttpRequest ---> DownloadAction ---> SUCCESS Result --> 输出流

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;  
    }  
  
}

说明:

  1. 在下载的Action中,必须有个InputStream类型的field和对应的get方法。
  2. 下载时方便,将文件名、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>

解释说明:

  1. 为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。
  2. 为了能在HTTP Response中使用到MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。

© 著作权归作者所有

共有 人打赏支持
SPPan
粉丝 10
博文 29
码字总数 15103
作品 0
成都
程序员
struts2学习笔记之文件下载

文件下载最重要的是设置响应头: 1 contentType,指定文件的MIME类型,使浏览器获知。如doc文件可以如下设置:application/msword 2 contentDisposition,告知文件名称如:attachment;filena...

美码师
2011/09/11
0
0
Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解

文件上传和文件下载是我们在web应用程序中常用的两个功能,在java中,实现这两种功能的方式也有很多种,其中struts2就给我们提供了一种算是比较简单的方式吧,下面我们就一起来看一下,首先我...

长平狐
2012/11/12
531
1
Content-Disposition 中文编码

今天在使用koa下载文件的时候,一直抱错'invalid charactor',关键是明明测试都没得问题的,郁闷了老半天 后来返现测试上用的是test.xlsx,而生产上是动态的文件名,有些时候会是中文,所以基...

小昭归来
2016/12/22
35
0
JSP、Struts2下载中文文件名乱码问题

方案一: 原来处理下载的代码如下: response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8")); 下载的程序里有了这句,一般在......

长平狐
2012/11/12
421
0
Struts 2中实现文件下载(修正中文问题)

在BlogJava上已经有一位作者阐述了文件上传的问题,地址是在Struts 2中实现文件上传,因此我就不再讨论那个话题了。我今天简单介绍一下Struts 2的文件下载问题。 我们的项目名为 struts2hel...

文文1
2015/12/02
57
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

新工作与老项目

新的工作不知不觉的干了一个多月了。怎么说呢,跟想象中的差别不少,本来想的能进来跟大公司的同事能有很多交流,能在团队中跟大牛学习更快。结果公司的这个项目上只有两个程序员,项目是十年...

zypy333
18分钟前
0
0
mysql 在windows的安装

mysql 在windows的安装。 mysql64位的server的下载地址是: https://dev.mysql.com/downloads/mysql/ 使用的是5.7版本。 下载安装包,解压至D:\mysql\mysql-5.7.23-winx64\ 在D:\mysql\mysq...

lxzh504
31分钟前
1
0
云技术、大数据(hadoop)入门常见问题回答

当我们学习一门新技术的时候,我们总是产生各种各样的问题,这些问题整理出来,包括该 1.如何学习hadoop? 2.hadoop常见问题? 3.还有hbase、hive安装使用等? 你知道搭建hadoop平台需要些什...

董黎明
31分钟前
1
0
小程序自定义底部tab

场景 1.tabBar是在内页而非首页,这时就不得不自定义一个tabBar了 2.自定义风格 3.子页数量超过5个,得到更多了tab 4.改变点击tab默认事件,比如出登录界面,或者弹出上拉子菜单等 步骤 1.照...

萤火的萤火
36分钟前
1
0
shell炫技

1.为脚本添加“--help” #!/bin/shif [ ${#@} -ne 0 ] && [ "${@#"--help"}" = "" ]; then printf -- '...help...\n'; exit 0;fi; 2.输出字体添加颜色 https://misc.flogisoft.com......

HJCui
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部