- String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
- System.out.println(filename);
- String type = this.getServletContext().getMimeType(filename);
- // 设置到头中
- response.setHeader("Content-Type",type);
- // 获取文件的流对象服务器中的编码格式是工作空间的编码格式
- InputStream is = this.getServletContext().getResourceAsStream("/download/"+filename);
- // 判断用户浏览器修改编码格式必须要在修改头信息之前, 要不然会乱码
- String agent = request.getHeader("User-Agent");
- if(agent.contains("Goole")){// 这里只用了两个编码格式
- //base64 编码格式
- filename = base64EncodeFileName(filename);
- }else{
- filename = URLEncoder.encode(filename, "UTF-8");
- }
- // 设置每个文件的打开方式都为下载
- response.setHeader("Content-Disposition","attrchment;filename="+filename);
- // 创建写入流
- OutputStream os = response.getOutputStream();
- int len = 0 ;
- byte[] by = new byte[1024];
- while((len= is.read()) != -1){
- os.write(by,0,len);
- }
- // 关流 只需要关闭一个流即可 os 流会在 response 对象响应完成后自动关闭
- is.close();
- }
- public static String base64EncodeFileName(String fileName) {
- BASE64Encoder base64Encoder = new BASE64Encoder();
- try {
- return "=?UTF-8?B?"
- + new String(base64Encoder.encode(fileName
- .getBytes("UTF-8"))) + "?=";
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
来源: http://www.bubuko.com/infodetail-2604649.html