下载文件名空格变加号、乱码、被截断问题解决
来源:互联网 发布:cfd软件百花齐放论文 编辑:程序博客网 时间:2024/05/16 06:12
用java写了一个下载文件的类,旨在用浏览器下载服务端文件,代码大致如下:
/** * 文件下载 * @param res * @param filePath * @throws UnsupportedEncodingException */public void downloadFile(HttpServletRequest req,HttpServletResponse res,String filePath) throws UnsupportedEncodingException{if(null == filePath || "".equals(filePath.trim())){return;}filePath = Util.getUTF8(filePath);res.setCharacterEncoding("UTF-8");String fileName = URLEncoder.encode(getFileName(filePath), "UTF-8");res.setHeader("Content-Disposition", "attachment;fileName=" + fileName);OutputStream os = null;FileInputStream fis = null;try {os = res.getOutputStream();fis = new FileInputStream(filePath);byte[] b = new byte[100];int c;while((c=fis.read(b))>0){os.write(b,0,c);}os.flush();os.close();} catch (IOException e) {log.error(e);e.printStackTrace();}finally{if(null!=fis){try {fis.close();} catch (IOException e) {log.error(e);e.printStackTrace();}}if(null!=os){try {os.close();} catch (IOException e) {log.error(e);e.printStackTrace();}}}}1.文件名有空格时,空格变为加号
上面的代码调试执行后,用谷歌和IE进行调试下载,内容没有问题,但却发现要下载的文件名中含有空格的时候,空格变成了加号如下图:
添加以下代码,对文件名进行空格替换即可解决:
fileName=fileName.replaceAll("\\+","%20"); //处理空格转为加号的问题
2.下载文件的文件名称乱码
在上面对文件名处理后,发现在谷歌和IE没有问题,而火狐浏览器出现中文乱码:
觉得奇怪,因为看最上面的代码块中,已经进行过UTF-8转换。但知道这是由于对文件名进行编码的问题,于是用以下方式对文件进行编码处理:
if(req.getHeader("User-Agent").toUpperCase().indexOf("MSIE")>0){fileName = URLEncoder.encode(getFileName(filePath), "UTF-8");}else{fileName = new String((getFileName(filePath)).getBytes("UTF-8"),"ISO8859-1");}这样处理后,该问题得到解决,也就是我们要指定UTF-8编码的标准,各个浏览器默认的编码标准可能不大一样。
3.下载文件被截段
进行上面两次处理后,谷歌和IE浏览器都已正常,但发现,在火狐浏览器中,因为要下载的文件名中有空格,下载文件被截断了,导致文件后缀被去掉,文件类型无从得知,只知道为“文件”类型,如图:
作为一个严谨的程序员,还是要解决好兼容性的。将上面代码中setHeader方法中的文件名,用字符串包起来即以解决,代码改为如下:
res.setHeader("Content-Disposition", "attachment;fileName=\"" + fileName +"\"");
至此,通过对文件名字符串进行处理,下载文件名空格变加号、乱码、被截断问题都得以解决。
阅读全文
0 0
- 下载文件名空格变加号、乱码、被截断问题解决
- 下载文件名空格变加号问题
- 下载文件名空格变加号的问题
- Servlet实现下载 firefox下文件名有空格时,文件名会被截断 问题解决办法
- java文件下载空格变加号处理
- ZK框架文件下载文件名乱码问题(空格,#截断)解决
- java下载中文及空格变加号解决方案
- BASE64 加号变空格 处理
- URL中加号变空格
- 解决:文件下载 文件名中有空格 ff会将文件名截断
- 整理java文件下载(中文乱码、火狐浏览器乱码、空格变+号、文件名包含空格时文件名可能显示不全等问题)
- java文件下载文件名乱码问题解决方案
- 下载文件文件名是加号
- Ajax Post数据加号变空格
- iOS URL编码加号变空格
- iOS URL编码加号变空格
- URLDecoder.decode之后加号变空格问题
- JSON传输数据加号变空格问题
- angular应用,一个input上有自定义directive和ng-model,怎么在directive更新input的value时更新model
- 网上总结编程技巧
- jquery table 倒计时
- 在NAND FLASH上建立YAFFS2文件系统
- Spring表达式
- 下载文件名空格变加号、乱码、被截断问题解决
- java.sql.SQLException: 无效的列索引
- [HDU](2147)kiki's game ---找规律博弈(博弈)
- nodejs之Stream(流)
- Android ptrace进程注入原理
- PCL滤波II
- 用Eclipse搭建SSM+Maven+Shiro环境
- HDU 1171
- monkey-GUI代码编辑分享