【javaweb:servlet】从服务端下载中文名称文件应该注意的问题!!!
2018-01-15 21:24
483 查看
请看下面的代码,与普通的英文名称文件下载方式不同,里面涉及到编码和解码的问题!
package com.content; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownLoadServlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //*******文件名称是中文的下载******* //获得要下载的文件的名称 String filename = request.getParameter("filename");//????.jpg //解决获得中文参数的乱码----下节课讲 filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg //获得请求头中的User-Agent String agent = request.getHeader("User-Agent"); //根据不同浏览器进行不同的编码 String filenameEncoder = ""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); } //要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类型 response.setContentType(this.getServletContext().getMimeType(filename)); //告诉客户端该文件不是直接解析 而是以附件形式打开(下载)----filename="+filename 客户端默认对名字进行解码 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //这儿的filenameEncoder是对"美女.jpg"进行针对不同浏览器进行的编码, //不再是"美女.jpg",因为它不识别(导致下载的文件没名称) //获取文件的绝对路径 String path = this.getServletContext().getRealPath("download/"+filename); //获得该文件的输入流 InputStream in = new FileInputStream(path); //获得输出流---通过response获得的输出流 用于向客户端写内容 ServletOutputStream out = response.getOutputStream(); //文件拷贝的模板代码 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); //out.close();out.close()可不必写 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
相关文章推荐
- java web上传、下载文件源码以及应该注意的问题
- 【JavaWeb-13】文件上传DiskFileItemFactory、ServletFileUpload以及注意事项、文件下载及注意事项
- javaweb-day06-1 (Servlet - Response - 输出中文、输出1、中文名字的文件下载、字符流读图片会导致数据丢失的剖析)
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
- java 下载文件,中文文件名称乱码的问题
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
- 【javaweb:servlet】客户端请求服务端进行文件下载的demonstration
- java文件下载及名称乱码问题
- JAVA文件下载中文名称乱码解决方案
- 关于使用servlet下载中文名称的文件
- servlet实现文件下载及中文问题
- java用ant.jar解压zip格式的文件时,中文名称的文件的文件名乱码问题
- servlet在tomcat下向文件中写东西时应该注意的问题
- 解决jsp下载文件报错getOutputStream() has already,及无法下载中文名称标题的问题
- strtus2 批量下载 中文问题、压缩文件等 ------ 讨论struts2工作流程 (摘自:http://www.blogjava.net/xcp/archive/2009/10/30/downloadlist.html)
- 文件下载response.setHeader中文名称显示问题
- 解决javaWEB 下载文件中文名称乱码问题
- PHP解决浏览器 下载文件 中文名称乱码问题--兼容大多浏览器
- java文件下载的中文文件名乱码问题的解决