关闭

java使用io流下载.docx. xlsx文件,出现文件损坏提示

737人阅读 评论(0) 收藏 举报
  • 介绍

在使用io流下载服务器上的资源文件时,出现以下提示:但是选择“是”后文件可以正常打开  
  • 参考

    代码如下:
[codesyntax lang="java"]
@RequestMapping(value = "downLoadInstruction")
public void downLoadInstruction(HttpServletRequest request,HttpServletResponse response) {
   BufferedOutputStream out = null;
   InputStream is = null;
   try {
       response.reset();
       response.setCharacterEncoding("UTF-8");
       String filename = "专家信息管理系统使用说明.docx";
       response.setContentType("application/msword");
       String templatePath = request.getSession().getServletContext().getRealPath("/template/instructionsForUse.docx");
        //下载是否使用的火狐浏览器
        String agent = request.getHeader("User-Agent");
        boolean isMSIE = (agent != null && agent.indexOf("MSIE") != -1);
        if(isMSIE){
             response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "UTF-8"));
         }else{
             response.setHeader("Content-Disposition", "attachment;filename="+ new String(filename.getBytes("UTF-8"), "ISO-8859-1"));    
            }
            
          out = new BufferedOutputStream(response.getOutputStream());
          is = new BufferedInputStream(new FileInputStream(new File(templatePath)));
          byte[] content = new byte[1024];
          int len = 0;
          while ((len = is.read(content)) > 0) {
             out.write(content, 0, len);
          }  
                //注释1
                //out.write(content);
          out.flush();
     } catch (Exception e) {
         e.printStackTrace();
     }finally{
         try {
             if(is!=null){
                 is.close();
              }
              if(out!=null){
                  out.close();
              }
          } catch (Exception e2) {
              e2.printStackTrace();
          }
    } 
 }
[/codesyntax] 代码中需要将注释1的地方注释掉,不然就会出现文件损坏,原因在于“尝试每次读取1024个字节,写入buffer数组,如果少于1024,就会返回实际读取的字节,os.write(buffer);可能多了“。  

查看原文:http://surenpi.com/2017/01/03/java%e4%bd%bf%e7%94%a8io%e6%b5%81%e4%b8%8b%e8%bd%bd-docx-xlsx%e6%96%87%e4%bb%b6%ef%bc%8c%e5%87%ba%e7%8e%b0%e6%96%87%e4%bb%b6%e6%8d%9f%e5%9d%8f%e6%8f%90%e7%a4%ba/
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    我的GitHub
    个人资料
    • 访问:114749次
    • 积分:6086
    • 等级:
    • 排名:第4135名
    • 原创:498篇
    • 转载:3篇
    • 译文:0篇
    • 评论:7条
    最新评论