在javaweb项目中实现文件下载,当文件名中包含中文文字时,需要进行如下的处理,才能在浏览器端正常显示中文文件名:

response.setContentType("octets/stream");
response.addHeader("Content-Type", "text/html; charset=utf-8");
response.addHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"ISO8859-1"));

效果如下:

完整代码如下(只在Firefox上测试通过):

public void download(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("utf-8");
String path = request.getParameter("filePath");
if (StringUtils.isEmpty(path)) throw new Exception("文件位置错误");
path = URLDecoder.decode(path, "UTF-8");
File file=new File(path); String fileName=file.getName();
InputStream fis=new BufferedInputStream(new FileInputStream(path));
byte[] buffer=new byte[fis.available()]; fis.read(buffer);
fis.close();
response.reset();
response.setContentType("octets/stream");
response.addHeader("Content-Type", "text/html; charset=utf-8");
response.addHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"ISO8859-1"));
response.addHeader("Content-Length",""+ file.length());
OutputStream toClient=new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
}
catch(Exception ex) {
logger.error(ex.getMessage(), ex);
response.setContentType("text/html;charset=UTF-8");
try {
response.getWriter().print("<script type='text/javascript'>alert('文件下载异常');</script>");
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}

文件名含中文的JavaWeb文件下载的更多相关文章

  1. 130ftp-python3 FTP简单实现文件下载(含中文乱码问题)

    130ftp-python3 FTP简单实现文件下载(含中文乱码问题) python3 FTP简单实现文件下载(含中文乱码问题) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. 剖析ifstream打开含中文路径名文件失败的原因

    http://blog.csdn.net/yukin_xue/article/details/7543423 最近写程序的时候遇到了使用ifstream打开含中文路径文件时失败的问题,在网上翻了一下, ...

  3. window.location.href url含中文服务器收到乱码问题解决

    中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...

  4. PHP截取含中文的混合字符串长度的函数

    截取含中文的混合字符串长度 /** * 截取中文混合字符串指定长度 * * @param string $string * @param integer $length * @param string ...

  5. XFTP连接主机文件名显示中文乱码且不能下载的解决方法

    Xftp连接主机文件名显示中文乱码且不能下载的本地解决方法 原因:Xftp编码格式问题 解决方法:把Xftp的编码格式增加UTF-8 具体步骤:打开Xftp,文件-属性,在打开的属性界面中打开&quo ...

  6. 关于Python, ftplib模块中的cwd()进入含中文目录失败的问题

    使用Python的ftplib模块连接ftp服务器时, 使用cwd()连接含中文的目录, 报错 : UnicodeEncodeError: 'latin-1' codec can't encode c ...

  7. 【C#】POST请求参数含中文,服务器解析得到乱码

    问题:POST请求参数含有中文,已将含中文的string以UTF-8编码格式转为byte[],并写入到请求流中,但服务器收到数据后以UTF-8解码,得到的依然是乱码! 百度到了以下方法,但依然无法解决 ...

  8. java把流抛给浏览器下载时,当下载的文件文件名为中文时,出现中文名被替换为“----------”的情况

    比如说,下载的文件名为: 软件分析报告.docx,当使用流抛给浏览器下载时,浏览器下载的文件为:-----------.docx 出现这种情况的原因:大体的原因就是header中只支持ASCII,所以 ...

  9. 0071 CentOS_Tomcat访问文件名包含中文的文件出现404错误

    访问CentOS+Tomcat下的,文件名包含中文的文件出现404错误 修改:apache-tomcat-7.0.78/conf/server.xml <Connector port=" ...

随机推荐

  1. MongoDB 用户角色

    Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建.删除,查看统计或访问system.profile user ...

  2. ExtJS 6.2 基础使用

    一. 安装: 下载两个压缩包:分别是 ext-6.2.0-gpl(这个是ExtJS 的SDK文件,创建新项目的时候需要用). SenchaCmd-6.5.2-windows-64bit (这个下载下来 ...

  3. Spring 工作流程简单介绍

    Spring Web MVC 处理Http请求的大致过程: 一旦Http请求到来,DispatcherSevlet将负责将请求分发. DispatcherServlet可以认为是Spring提供的前端 ...

  4. 优秀的PHP开发者是怎样炼成的?

    4.在数据库中避免使用联合操作 比起其它的Web编程语言来说,PHP的数据库功能十分强大.但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作 ...

  5. ubuntu 安装nfs 服务

    1. 安装nfs服务软件 (1)服务器端 $sudo apt-get install nfs-kernel-server  rpcbind (2)客户端 (可以省略) $sudo apt-get in ...

  6. 微信红包随机生成算法(PHP版)

    /** * 求一个数的平方 * @param $n */ function sqr($n){ return $n*$n; } /** * 生产min和max之间的随机数,但是概率不是平均的,从min到 ...

  7. 在ubuntu14.04上漏洞环境vulndocker的DOCKER搭建

    一.下载git包以及安装: git clone https://github.com/leveryd/vulndocker.git cd vulndocker apt-get install uwsg ...

  8. 主流品牌服务器(Dell、HP、IBM)远程管理卡IP配置参考

    版权声明:个人网络收集整理,欢迎转载! https://blog.csdn.net/niufenger/article/details/80737878 ※Dell服务器iDRAC IP配置 ※HP服 ...

  9. PreparedStatement vs Statement

    Statement和PreparedStatement之间的区别 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程   2.使用 Statemen ...

  10. 云笔记类APP推荐

    一.思绪收集类 Google Keep - 记事和清单 - Google Play 上的应用 注:谷歌 Keep 是最方便的收集思绪 APP 了.卡片视图,反应迅速,流畅,UI 漂亮,功能齐全,唯一不 ...