2017-06-20 79 views
0

我想下面的代碼下載與POST REST端點的CSV文件。REST POST終端下載csv文件

@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); 
    } 

} 

任何建議都高度讚賞。

感謝您

+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); 

希望它會工作。