2017-02-17 4 views
0

私の用途は、アプリケーションをサーバーからExcelにダウンロードさせることです。 Excelにグラフがあるはずです。 「:データが失われた可能性がありますファイルのエラー」Excelを開いている間ここでファイルを転送中にデータが失われて、Springの応答が返ってくる

はそれ

@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のグラフを見ることができませんでした。

また、コンテンツタイプを「OCTET-STREAM」に設定して確認しましたが、運がありません。

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

データ損失なしでExcelファイルを転送するにはどうすればよいですか?

+0

でExcelファイルをダウンロードすることができますか? – cralfaro

答えて

0

私はこのコードを使用して、同じエラーを取得する場合、私は同じことをダウンロードしようとすると確認することができますので、私はあなたには、いくつかの場所にファイルをアップロードすることができ、グラフィックス

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()); 
     } 
    } 
関連する問題