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を取得している場合は、
あなたはどのような応答を返しますか? –
レスポンスボディにダウンロードURL(blob:http:// localhost:8080/de7b6de7-9f52-4485-bef5-2f1e43cedd99)があり、ファイルタイプファイル – Rose18
https://stackoverflow.com/questions/27017495/spring-mvcをダウンロードします。 -excel-file-download-corrupts-file/27018596#27018596 – StanislavL