[英]REST POST endpoint to download csv file
我正在尝试下面的代码以使用POST REST端点下载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 );
}
}
任何建议都将受到高度赞赏。
谢谢
如果要获取URL,请尝试传递该URL以从中获取文件对象,如下所示:
FileUtils.copyURLToFile(URL, File);
希望它能工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.