java动态下载文件的怪异现象

车开源 发布于 2016/08/29 10:45
阅读 275
收藏 0
        response.setContentType(attach.getContentType());
        response.setHeader("Content-Length",""+file.length());
        response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(attach.getFileName().getBytes("gbk"), "iso8859-1") + "\"");
        
        //此方式不知为何,遇到极个别看似正常的文件但下载时会卡住。
        IOUtils.copy(new BufferedInputStream(new FileInputStream(file)), new BufferedOutputStream(response.getOutputStream()));
        

代码如上。

主要是动态下载文件,在测试时发现用户上传的一个docx文件,无法通过该接口下载回来,点击下载时,在浏览器下载列表中就显示如下:

文件大小为0,下载过程会一直卡住几分钟,然后提示失败,其它文件则正常,唯独这一个文件是这样。用ftp从服务器上下载此文件是可以正常打开,文件内容也正常显示。后来把下载核心由

IOUtils.copy(new BufferedInputStream(new FileInputStream(file)), new BufferedOutputStream(response.getOutputStream()));

改用以下方式就正常下载了。请指教这是为哈?

        FileInputStream inputStream =null;
        ServletOutputStream out=null;
        try {  
        	inputStream = new FileInputStream(file);  
        	out = response.getOutputStream();  

  
            int b = 0;  
            byte[] buffer = new byte[1024];  
            while ((b=inputStream.read(buffer)) != -1){  
                out.write(buffer,0,b);  
            }  
            inputStream.close();  
            out.flush();  
            out.close();  
  
        } catch (IOException e) {  
            throw new Exception(e);
        } finally{
        	if(inputStream!=null) inputStream.close();
        	if(out!=null) out.close();
        }


加载中
0
anxinxx
anxinxx
IOUtils.copy(new FileInputStream(file),response.getOutputStream()); 试试这个
0
holo
holo

看下IOUtils的代码就知道了,里面应该是没有关闭输入流导致的吧,你自己写的代码手动关了。

response.flushBuffer();
建议在加上一段这段代码

返回顶部
顶部