2015-09-04 3 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, Chrome, Opera но он не работает в 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 упал и не отправлено, так как ответ уже сделан.

После этого браузер может быть смущен переданным контентом.

Смежные вопросы