java通用格式下载,中文乱码解决
来源:互联网 发布:linux启动nodejs项目 编辑:程序博客网 时间:2024/04/30 01:25
从网上看到了好多关于文件下载的问题,我之前也遇到过。比如在ff/chrome/360都好用,但在ie下乱码。或者中文转码后中文部门丢失等。今天整理下文件下载的问题,亲测ie,ff,chrome,360都能显示中文名,并且支持图片、office等通用文件的下载,下面附上代码
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import javax.activation.MimetypesFileTypeMap;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public static void downloadFile(String filename, String filePath,HttpServletRequest request, HttpServletResponse response) {try { // 1.得到下载文件的名称.必须处理乱码. filename = new String(filename.getBytes("iso8859-1"), "utf-8"); // 2.从upload目录下查找filename文件是否存在。 File file = new File(filePath); // 下载设置 // 1.设置mimetype类型 String mimeType = new MimetypesFileTypeMap().getContentType(file); response.setContentType(mimeType); // 根据文件名获取这种文件的mimeType值,设置到http响应头中。 // 以下代码解决了浏览器显示下载文件名乱码问题 String agent = request.getHeader("User-agent"); String viewfilename = null; if (agent.contains("MSIE")) { // IE浏览器 viewfilename = URLEncoder.encode(filename, "utf-8"); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); viewfilename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else if (agent.contains("Chrome")) { // google浏览器 viewfilename = URLEncoder.encode(filename, "utf-8"); } else { // 其它浏览器 viewfilename = URLEncoder.encode(filename, "utf-8"); } // 2.设置响应头 Content-Dispositon. response.setHeader("Content-Disposition", "attachment;filename=" + viewfilename); if (file.exists()) { // 存在 // 3.通过输入流将这个文件内容读取出来,通过response获取输出流,写回到浏览器. FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); int len = -1; byte[] b = new byte[1024]; while ((len = fis.read(b)) != -1) { os.write(b, 0, len); os.flush(); } try { fis.close(); os.close(); } catch (IOException e1) { e1.printStackTrace(); } } else { // 不存在 throw new RuntimeException("下载资源不存在"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); throw new RuntimeException("下载资源名称转码异常"); } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException("下载资源不存在"); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("下载资源流异常"); } }
1 0
- java通用格式下载,中文乱码解决
- java 文件下载且解决中文乱码
- Java文件下载之解决中文乱码
- Java 实现文件下载--解决中文乱码
- 文件下载解决中文乱码
- 文件下载中文乱码解决
- 下载图片--解决中文乱码
- Java实现文件下载并解决中文文件名乱码
- java实现文件下载 中文文件名乱码的解决
- java实现中文文件下载,解决乱码问题,亲测无问题~~
- java文件下载的中文文件名乱码问题的解决
- Java实现文件下载并解决中文文件名乱码
- 解决java下载csv中文乱码(加BOM头)
- 解决java中文乱码
- Java中文乱码解决
- Java中文乱码解决
- java解决中文乱码
- JAVA中文乱码解决
- 字符串和基本类型之间的转换
- Linux Shell 管道与重定向
- 递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模
- ACM1006——Tick and Tick
- IOS之修改webView的Cookie及DoMain
- java通用格式下载,中文乱码解决
- HTML块级元素与行级元素
- 新浪微博开发框架Handler
- 前端书籍推荐之《精通JavaScript+jQuery》
- R第六问 关联分析中的支持度、置信度和提升度
- VS里面的类型转换
- Inkscape
- Android中Socket通信之TCP与UDP传输原理
- Java NIO原理 图文分析及代码实现