文件下载(解决中文文件名下载乱码问题)(二)

针对“文件下载(解决中文文件名下载乱码问题)”出现的问题:在弹出的文件下载框选择“打开”不能正常打开文件。
下面的代码可解决此问题:
java 代码
  1. <%@ page contentType="text/html;charset=utf-8" %>       
  2. <%@ page import = "java.util.*" %>       
  3. <%@ page import = "java.io.*" %>       
  4. <%@ page import = "java.net.*" %>       
  5. <%       
  6. //防止IE缓存       
  7. response.setHeader("pragma","no-cache");       
  8. response.setHeader("cache-control","no-cache");       
  9. response.setDateHeader("Expires",0);       
  10. //设置编码       
  11. request.setCharacterEncoding("UTF-8");       
  12.       
  13. String fileName = request.getParameter("fileName");       
  14. //取到文件       
  15. File file = new File(application.getRealPath("/")+"upload/" + fileName);       
  16. response.reset();       
  17. //response.setContentType("application/octet-stream;charset=UTF-8");    
  18. response.setContentType("application/octet-stream;charset=GBK");//解决在弹出文件下载框不能打开文件的问题   
  19. //System.out.println(response.getCharacterEncoding());       
  20. //一定要对fileName进行encode       
  21. //response.addHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));    
  22. response.addHeader("Content-Disposition""attachment; filename=" + new String(fileName.getBytes("GBK"),"ISO8859-1"));//解决在弹出文件下载框不能打开文件的问题   
  23. response.setContentLength((int) file.length());       
  24.       
  25. byte[] buffer = new byte[4096];       
  26. BufferedOutputStream output = null;       
  27. BufferedInputStream input = null;       
  28.       
  29. // 写缓冲区:       
  30. try {       
  31.     output = new BufferedOutputStream(response.getOutputStream());       
  32.     input = new BufferedInputStream(new FileInputStream(file));       
  33.       
  34.     int n = (-1);       
  35.     while ((n = input.read(buffer, 04096)) > -1) {       
  36.         output.write(buffer, 0, n);       
  37.     }       
  38.     response.flushBuffer();       
  39. }       
  40. catch (Exception e) {       
  41. // maybe user cancelled download       
  42. finally {       
  43.     if (input != null) input.close();       
  44.     if (output != null) output.close();       
  45. }       
  46. %>   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值