文件下载之两个头一个流,解决下载框文件名乱码问题
1,两个头设置
String filename = DownUtils.filenameEncoding(filename,request);
String contentType=this.getServletContext().getMimeType(filename);
String contentDisposition="attachment;filename="+filename;
resp.setHeader("Content-Type", contentType);
resp.setHeader("Content-Disposition", contentDisposition);
2,一个流设置
FileInputStream in = new FileInputStream(filename);
ServletOutputStream out =resp.getOutputStream();
//IOUtils是apache的那个commons-io包下的(web开发必引入的包)
IOUtils.copy(in, out);
3,解决下载框中文件名乱码问题
public class DownUtils{
public static String filenameEncoding(String filename, HttpServletRequest request) throws IOException{
String agent = request.getHeader("User-Agent");//获取浏览器
if(agent.contains("Firefox")){
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
}else if(agent.contains("MSIE")){
filename = URLEncoder.encode(filename, "utf-8");
}else{
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
}