2017-06-20 13 views
0

POST RESTエンドポイントでcsvファイルをダウンロードするには、以下のコードを試しています。csvファイルをダウンロードするREST POSTエンドポイント

@ApiOperation(value = "export", 
     notes = "Export Report as a CSV") 
@ApiResponses(value = { 
     @ApiResponse(code = 400, message = "Bad Request"), 
     @ApiResponse(code = 404, message = "Not Found"), 
     @ApiResponse(code = 500, message = "Internal Server Error") }) 
@RequestMapping(method = RequestMethod.POST, value = "/export") 
public ResponseEntity export(@RequestBody SearchCriteria criteria) 
{ 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm"); 
    SAStatsManager saStatsManager = new SAStatsManager(); 
    InputStreamResource inputStreamResource; 
    InputStream inputStream; 
    byte[] byteArray = new byte[0]; 
    HttpHeaders httpHeaders = new HttpHeaders(); 

    try 
    { 
     inputStreamResource = saStatsManager.export(criteria); 

     if (inputStreamResource == null) 
     { 
      return new ResponseEntity("Error in exporting report!!! ", HttpStatus.OK); 
     } 
     httpHeaders.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + REPORT_NAME+ criteria.getProductCombination() + "_" + sdf.format(new Date()) + ".csv"); 

     //convert inputStream to bytes 
     inputStream = inputStreamResource.getInputStream(); 
     ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
     int nRead; 
     byte[] data = new byte[1024]; 

     while ((nRead = inputStream.read(data, 0, data.length)) != -1) 
     { 
      buffer.write(data, 0, nRead); 
     } 

     buffer.flush(); 
     byteArray = buffer.toByteArray(); 

     httpHeaders.setContentLength(byteArray.length); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return new ResponseEntity(byteArray, httpHeaders, HttpStatus.OK); 

} 

この作業は例外なく行われます。しかし、これはどんなファイルもダウンロードしません。 .csvファイルをダウンロードするには、この残りのエンドポイントで一度呼び出します。

EDITED

@ApiOperation(value = "export", 
     notes = "Export Report as a CSV") 
@ApiResponses(value = { 
     @ApiResponse(code = 400, message = "Bad Request"), 
     @ApiResponse(code = 404, message = "Not Found"), 
     @ApiResponse(code = 500, message = "Internal Server Error") }) 
@RequestMapping(method = RequestMethod.POST, value = "/export", produces = "text/csv") 
public ResponseEntity export(@RequestBody SearchCriteria criteria) 
{ 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm"); 
    SAStatsManager saStatsManager = new SAStatsManager(); 
    InputStreamResource inputStreamResource; 
    InputStream inputStream; 
    byte[] byteArray = new byte[0]; 
    HttpHeaders httpHeaders = new HttpHeaders(); 

    try 
    { 
     inputStreamResource = saStatsManager.export(criteria); 

     if (inputStreamResource == null) 
     { 
      return new ResponseEntity("Error in exporting report!!! ", HttpStatus.INTERNAL_SERVER_ERROR); 
     } 
     httpHeaders.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + REPORT_NAME + criteria.getProductCombination() + "_" + sdf.format(new Date()) + ".csv"); 

     //convert inputStream to bytes 
     inputStream = inputStreamResource.getInputStream(); 
     ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
     int nRead; 
     byte[] data = new byte[1024]; 

     while ((nRead = inputStream.read(data, 0, data.length)) != -1) 
     { 
      buffer.write(data, 0, nRead); 
     } 

     buffer.flush(); 
     byteArray = buffer.toByteArray(); 

     httpHeaders.setContentLength(byteArray.length); 

     return new ResponseEntity(byteArray, httpHeaders, HttpStatus.OK); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
     return new ResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); 
    } 

} 

任意の提案が高く評価されています。あなたはURLを取得している場合は、

+0

あなたはどのような応答を返しますか? –

+0

レスポンスボディにダウンロードURL(blob:http:// localhost:8080/de7b6de7-9f52-4485-bef5-2f1e43cedd99)があり、ファイルタイプファイル – Rose18

+0

https://stackoverflow.com/questions/27017495/spring-mvcをダウンロードします。 -excel-file-download-corrupts-file/27018596#27018596 – StanislavL

答えて

0

おかげで、その後

FileUtils.copyURLToFile(URL, File); 

として、そこからファイルオブジェクトを取得するには、そのURLを渡してみてください、それが動作します願っています。

関連する問題