文件名含中文的JavaWeb文件下载
在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文件下载的更多相关文章
- 130ftp-python3 FTP简单实现文件下载(含中文乱码问题)
130ftp-python3 FTP简单实现文件下载(含中文乱码问题) python3 FTP简单实现文件下载(含中文乱码问题) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 剖析ifstream打开含中文路径名文件失败的原因
http://blog.csdn.net/yukin_xue/article/details/7543423 最近写程序的时候遇到了使用ifstream打开含中文路径文件时失败的问题,在网上翻了一下, ...
- window.location.href url含中文服务器收到乱码问题解决
中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...
- PHP截取含中文的混合字符串长度的函数
截取含中文的混合字符串长度 /** * 截取中文混合字符串指定长度 * * @param string $string * @param integer $length * @param string ...
- XFTP连接主机文件名显示中文乱码且不能下载的解决方法
Xftp连接主机文件名显示中文乱码且不能下载的本地解决方法 原因:Xftp编码格式问题 解决方法:把Xftp的编码格式增加UTF-8 具体步骤:打开Xftp,文件-属性,在打开的属性界面中打开&quo ...
- 关于Python, ftplib模块中的cwd()进入含中文目录失败的问题
使用Python的ftplib模块连接ftp服务器时, 使用cwd()连接含中文的目录, 报错 : UnicodeEncodeError: 'latin-1' codec can't encode c ...
- 【C#】POST请求参数含中文,服务器解析得到乱码
问题:POST请求参数含有中文,已将含中文的string以UTF-8编码格式转为byte[],并写入到请求流中,但服务器收到数据后以UTF-8解码,得到的依然是乱码! 百度到了以下方法,但依然无法解决 ...
- java把流抛给浏览器下载时,当下载的文件文件名为中文时,出现中文名被替换为“----------”的情况
比如说,下载的文件名为: 软件分析报告.docx,当使用流抛给浏览器下载时,浏览器下载的文件为:-----------.docx 出现这种情况的原因:大体的原因就是header中只支持ASCII,所以 ...
- 0071 CentOS_Tomcat访问文件名包含中文的文件出现404错误
访问CentOS+Tomcat下的,文件名包含中文的文件出现404错误 修改:apache-tomcat-7.0.78/conf/server.xml <Connector port=" ...
随机推荐
- 【RF库Collections测试】Get Dictionary Keys
Name:Get Dictionary KeysSource:Collections <test library>Arguments:[ dictionary ]Returns `keys ...
- 管理开机启动:chkconfig
CentOS 6 如何设置服务开机启动: [root@localhost ~]$ ls /etc/init.d/httpd # /etc/init.d/目录下必须有启动脚本 [root@localho ...
- 第三篇:基于K-近邻分类算法的手写识别系统
前言 本文将继续讲解K-近邻算法的项目实例 - 手写识别系统. 该系统在获取用户的手写输入后,判断用户写的是什么. 为了突出核心,简化细节,本示例系统中的输入为32x32矩阵,分类结果也均为数字.但对 ...
- linux系统socket通信编程1
Linux下的Socket编程大体上包括Tcp Socket.Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较 ...
- Nginx.conf 配置文件详细说明
在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data; #启动进程,通常设置成和cpu的数量相等worker_process ...
- (使用lua++)Lua脚本和C++交互(三)
前两篇文章中介绍了C++调用lua.lua栈操作的一些相关知识. 下面说一下Lua的工具.我们下一步要用到其中的一个帮助我们的开发,其实,Lua里面有很多简化开发的工具,你可以去www.sourcef ...
- php学习三:函数
1. php中的函数和js中的区别 在php中,函数的形参可以给一个默认值,若有实参的传递则函数使用传递过来的参数,没有的话显示默认值 代码如下: function showSelf($name=& ...
- my sql 两个 索引 时的 union 与 or 的比较
背景:用一个表中的父子级关系进行查询 优化的过程中 发现可以使用 or 来代替 union all union all 需要查询两次 表 而 使用 or只需要 查询 一次 并且 两个字段都建立了索引 ...
- Egret3D初步笔记二 (Unity导出场景使用)
一 Scene 根据上一节的继续.在导入unity4.7.1_Egret3D_Dll.unitypackage后. 在Unity中双击打开Assets/Egret3D/Example下的Example ...
- ExecutorService的四种线程池
转自:https://www.cnblogs.com/zhaoyan001/p/7049627.html 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new ...