Download在struts2下的实现

来源:互联网 发布:高性能网络郝卫东 编辑:程序博客网 时间:2024/06/10 07:46
1.jsp页面
<a href="fileDownload?filePath=images/你好啊.txt">点击下载</a>

2.DownloadAction.java
public Class DownloadAction extends ActionSupport{private String filePath;//文件路径private String fileName;//文件名public InputStream getTargetFile() throws Exception{HttpServletRequest request=ServletActionContext.getRequest();filePath=request.getParameter("filePath");filePath=new String(filePath.getBytes("ISO-8859-0"),"UTF-8");//字节流转化解决后台接受乱码问题fileName=filePath.substring(filePath.lastIndexof("/"));fileName=java.net.URLEncoding.encode(fileName,"UTF-8");//转化乱码解决下载的时候提示文件名乱码问题return ServletActionContext.getServletContext.getResourceAsStream(filePath);}}

3.struts.xml
<action name="fileDownload" class=".."><result name="success" type="stream"><param name="contentType">text/plain</param> //如果是text/plain表示纯文本,text/xml表示xml image/gif image/jepg表示图片<param name="inputName">targetFile</param> //这里取值是去action中的get方法后面的把第一个字符改成小写,如getTargetFile()这里就是targetFile<param name="contentDisposition">attachment;filename="${fileName}"</param>//文件下载的处理方式,一种是inline一种是attachment,inline是内联,默认在浏览器打开,attachment是附件默认的点击保存<param name="bufferSize">4069</param>//设置缓冲</result></action>

4.解决中文乱码的第二种方法
在方法中
HttpServletResponse response=ServletActionContext.getResponse();
fileName=java.net.URLEncoding.encode(fileName,"UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
xml中就不用写那条param了
原创粉丝点击