关于Tomcat文件下载中文名乱码现象

//获得下载文件的名称
String filename = request.getParameter(“filename”);
//解决获得中文参数的乱码
filename = new String(filename.getBytes(“ISO8859-1”),“UTF-8”);
//获得请求头的User-Agent
String agent = request.getHeader(“User-Agent”);
//根据不同的浏览器进行不同的编码
String filenameEncode = “”;
if (agent.contains(“MSIE”)) {
// IE浏览器
filenameEncode = URLEncoder.encode(filename, “utf-8”);
filenameEncode = filename.replace("+", " ");
} else if (agent.contains(“Firefox”)) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncode= “=?utf-8?B?”
+ base64Encoder.encode(filename.getBytes(“utf-8”)) + “?=”;
} else {
// 其它浏览器
filenameEncode = URLEncoder.encode(filename, “utf-8”);
}
//要下载的这个文件的类型 -----客户端根据mime类型区分别
  response.setContentType(this.getServletContext().getMimeType(filename));
  //告诉客户端该文件不是直接解析,而是以附件形式打开,注意filename=
  response.setHeader(“Content-Disposition”, “attachment;filename=”+filenameEncode);
  
  //获取下载文件的绝对路径(相对于apach而言)
  String path = this.getServletContext().getRealPath(“download/”+filename);
  //获取该文件的输入流
  InputStream is = new FileInputStream(path);
  //获取输出流
  ServletOutputStream out = response.getOutputStream();
  //实现文件的拷贝
  int len = 0;
  byte[] bytes = new byte[1024];
  while((len=is.read(bytes))>0) {
   out.write(bytes,0,len);
  }
  is.close();
  //out会自动关闭

猜你喜欢

转载自blog.csdn.net/qq_41683305/article/details/88585072
今日推荐