繁体   English   中英

REST POST端点以下载csv文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM