2015-09-04 32 views
2

error http://i62.tinypic.com/2ep3spx.pngIE不加载图像

@RequestMapping(value = "/performer/{id}", method = RequestMethod.GET) 
    public void getPortfolioFile(HttpServletResponse response, 
           @PathVariable("id") int id){ 

     File image = getFile(id); 
     if(image != null){ 
      try { 
       FileCopyUtils.copy(FileCopyUtils.copyToByteArray(image), response.getOutputStream()); 
       String mimeType = image.toURL().openConnection().getContentType(); 
       response.setContentType(mimeType); 
       response.setContentLength((int)image.length()); 
       response.setHeader("Content-Disposition", "attachment; filename=\"" + image.getName() + "\""); 
      }catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

,你可以看到在响应中有一个形象,但它并没有在网页

这种方法可行完美的FF,铬,歌剧上显示但它在IE中不起作用。 我使用IE v10。

+0

如果你放弃了'response.setHeader(“Content-Disposition”...'line? – wero

+0

@wero,在任何情况下都没有帮助 –

+1

你应该改变顺序:先设置标题,然后写内容到输出流(否则如果内容长于响应缓冲区,头部可能会被无声丢弃) – wero

回答

1

变化的顺序:先写头

response.setContentType(mimeType); 
response.setContentLength((int)image.length()); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + image.getName() + "\""); 

则内容

FileCopyUtils.copy(FileCopyUtils.copyToByteArray(image), response.getOutputStream()); 
String mimeType = image.toURL().openConnection().getContentType(); 

否则,如果该图像是比响应缓冲时,报头是silenty下降,并且由于未发送响应已经提交。

浏览器可能会对发送的内容感到困惑。