Struts2文件下载时,中文文件名和chorm不兼容问题
来源:互联网 发布:js给div设置id 编辑:程序博客网 时间:2024/05/16 04:35
以下内容为转载,再加上自己的一些解决方法,如有冒犯,请见谅。新手上路,大家多多指教~~
原链接:内容出处链接
经过本人实验该方法非常简单:
Struts2文件下载时,如果所下载的文件名是中文时,就会出现乱码。
解决办法如下:
步奏一:修改fileName属性的set方法
public void setFileName(String fileName)
throws UnsupportedEncodingException {
this.fileName = new String(fileName.getBytes("ISO8859-1"), "utf-8");
}
步骤二:在getInputStream()方法中加上下面一句
(我的补充:加上下面的代码,在MyEclipse自带的浏览器会正常显示,在chorm中会出现
收到了来自服务器的重复标头
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
问题,后面说到解决方法)
ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;fileName="+java.net.URLEncoder.encode(fileName, "UTF-8"));
http://www.cnblogs.com/gywbg --------------GYW
以下是我的补充:
jsp:
<a href="hello?filename=1501560005_Java程序设计_教学进度表.doc" >dowmloading</a> </body>struts.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="default" extends="struts-default"><action name="hello" class="com.szu.action.DownloadAction"><!-- 向action传递参数,指定路径 --><param name="downloadFile">/image/</param><result name="success" type="stream"><!-- 输入流名称,对应action类中的gettargetfile()方法 --><param name="inputName" >targetFile</param><!-- 设置下载名称,attachment :下载时会打开下载框 --><param name="contentDisposition">filename=${filename};</param><!-- 下载文件时缓冲区的大小 --><param name="bufferSize">4096</param></result></action></package></struts>
DownloadAction.java:
package com.szu.action;import java.io.File;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.struts2.ServletActionContext;import org.apache.struts2.jasper.xmlparser.UTF8Reader;import com.opensymphony.xwork2.ActionSupport;public class DownloadAction extends ActionSupport{private String filename;private String downloadFile;public String getFilename() {//用这段代替原作者第二步骤的代码,即可解决chorm的兼容性System.out.println("gettname===="+filename);try {filename=java.net.URLEncoder.encode(filename, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println("gettname===="+filename);return filename;}public void setFilename(String filename) {System.out.println("setname===="+filename);try {filename=new String(filename.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println("setname===="+filename);this.filename = filename;}public String getDownloadFile() {return downloadFile;}//需要下载的文件路径public void setDownloadFile(String downloadFile) { //路径由配置文件中传递过来this.downloadFile = downloadFile;}public InputStream getTargetFile() {//由上面的路径,生成它的输入流System.out.println("path="+downloadFile);File file=new File(downloadFile);downloadFile+=filename;InputStream in=ServletActionContext.getServletContext().getResourceAsStream(downloadFile);return in;}public String execute() throws Exception{return SUCCESS;}}
控制台效果:(控制台出现乱码,在浏览器没出现乱码)
setname====1501560005_Java程åºè®¾è®¡_æ•™å¦è¿›åº¦è¡¨.doc
setname====1501560005_Java程序设计_教学进度表.doc
path=/image/
gettname====1501560005_Java程序设计_教学进度表.doc
gettname====1501560005_Java%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1_%E6%95%99%E5%AD%A6%E8%BF%9B%E5%BA%A6%E8%A1%A8.doc
setname====1501560005_Java程序设计_教学进度表.doc
path=/image/
gettname====1501560005_Java程序设计_教学进度表.doc
gettname====1501560005_Java%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1_%E6%95%99%E5%AD%A6%E8%BF%9B%E5%BA%A6%E8%A1%A8.doc
0 0
- Struts2文件下载时,中文文件名和chorm不兼容问题
- 文件下载文件名中文乱码 浏览器兼容问题
- struts2文件下载时,下载文件和保存文件名都为中文时解决方案
- Struts2 文件下载 (解决了中文文件名)
- struts2 实现中文文件名的文件下载
- Struts2 文件下载中文文件名乱码问题
- 解决Struts2文件下载文件名中文乱码
- struts2文件下载及文件名中文问题
- 文件下载中文文件名不显示
- 文件下载中文文件名不显示
- java文件下载不显示中文文件名
- struts2 下载文件,下载弹出框,文件名中文乱码
- Struts2 多个文件上传和下载(支持中文文件名)
- struts2下载中文文件名乱码
- struts2文件下载功能实现(文件名中文转码)
- struts2 Annotation 实现文件下载功能 文件名中文乱码问题
- struts2文件下载的时候,处理中文文件名的问题
- struts2 实现文件上传下载 (下载支持中文文件名)代码
- 【DP】poj1037
- python打包exe
- Pig_6. 数据摄取 & 输出 -- Protocel Buffer -- 待完善(腾讯 TDW 项目)
- 三阶贝塞尔曲线拟合1/4圆
- 二叉树 --- Java实现
- Struts2文件下载时,中文文件名和chorm不兼容问题
- EditText在Dialog中得到焦点并全部选中且弹出软件键盘
- hdu_1455_sticks
- HD_1247Hat’s Words (字典树)
- codeforces 416D Population Size
- 快学scala习题(七)-----包
- Day 26: TogetherJS —— 让我们一起来编程!
- 网站整合CKEditor和CKFinder(Java版)
- java 字符串比较诡异状况