2017-02-17 36 views
0

Мой вариант использования заключается в том, чтобы мое приложение загрузило excel (.xls) с сервера. Предполагается, что в Excel есть графики.Потеря данных при передаче файла excel как ответ пружины

Вот код на стороне сервера для него

@RequestMapping(value="/downloadExcel", method=RequestMethod.GET) 
public void download(HttpServletRequest request, HttpServletResponse response) { 

    String fileName = "excel.xls"; 
    response.setContentType("APPLICATION/vnd.ms-excel"); 
    response.addHeader("Content-Disposition", "attachment; filename=" + fileName); 
    try { 
     Files.copy(new File(fileName), (OutputStream)response.getOutputStream()); 
     response.getOutputStream().flush(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

При открытии Excel, я получаю оповещение о том, что "Ошибка файла: данные могут быть потеряны. И я не мог видеть графики в загруженном Excel.

Я также проверил с настройкой типа контента на «OCTET-STREAM», но не повезло.

response.setContentType("APPLICATION/OCTET-STREAM"); 

Как передать файл Excel без потери данных?

+0

могли бы вы загружаете в каком-то месте файл, так что я могу попытаться загрузить то же самое и проверить, если получить ту же ошибку? – cralfaro

ответ

0

Я использую этот код, и я могу скачать Excel файлы с графикой

void copyFileToResponse(HttpServletResponse response, File file) throws IOException { 
     if(file != null) { 
      String mimeType = URLConnection.guessContentTypeFromName(file.getName()); 
      if (mimeType == null) { 
       logger.debug("mimetype is not detectable, will take default"); 
       mimeType = "application/octet-stream"; 
      } 
      logger.debug("mimetype : {}", mimeType); 
      response.setContentType(mimeType); 
      response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName())); 
      response.setContentLength((int) file.length()); 
      InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); 
      FileCopyUtils.copy(inputStream, response.getOutputStream()); 
     } 
    } 

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

  • Нет связанных вопросов^_^