【发布时间】:2017-11-16 02:18:47
【问题描述】:
我正在尝试从 REST 端点下载 csv 文件。这是我正在尝试的。
@ApiOperation(value = "export",
notes = "Export Cache details for a given criteria")
@ApiImplicitParams({
})
@ApiResponses(value = {
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Internal Server Error") })
@RequestMapping(method = RequestMethod.GET, value = "/export")
public ResponseEntity export( HttpServletRequest request )
{
CacheDataManager cacheResultHandler = new CacheDataManager();
InputStreamResource inputStreamResource = null;
HttpHeaders httpHeaders = new HttpHeaders();
long contentLengthOfStream;
try
{
inputStreamResource = cacheResultHandler.exportCacheResults( request );
httpHeaders.set( HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + "test.csv" );
contentLengthOfStream = inputStreamResource.contentLength();
httpHeaders.setContentLength( contentLengthOfStream );
}
catch ( IOException e )
{
e.printStackTrace();
}
return new ResponseEntity( inputStreamResource, httpHeaders, HttpStatus.OK );
}
我的导出功能。
@Override
public InputStreamResource export( HttpServletRequest request )
{
StringBuilder sb = new StringBuilder();
StringBuilder fileName = new StringBuilder( VALIDATION_REPORT );
sb.append( "Column A" );
sb.append( "," );
sb.append( "Column B" );
sb.append( "\n" );
try
{
sb.append( "TEST A");
sb.append( ',' );
sb.append( "TEST B" );
sb.append( '\n' );
fileName.append( "_" ).append( sdf.format( new Date() ) ).append( ".csv" );
return CsvFileWriter.csvFileWrite( fileName.toString(), sb );
}
catch ( Exception e )
{
e.printStackTrace();
}
return null;
}
CsvFileWriter.java
package it.app.ext.dashboard.util;
import org.springframework.core.io.InputStreamResource;
import java.io.*;
public class CsvFileWriter
{
public static InputStreamResource csvFileWrite( String fileName, StringBuilder content ) throws FileNotFoundException
{
File file = null;
PrintWriter pw = null;
try
{
file = new File( fileName );
pw = new PrintWriter( file );
pw.write( content.toString() );
}
catch ( FileNotFoundException e )
{
e.printStackTrace();
}
finally
{
pw.flush();
pw.close();
}
InputStream inputStream = new FileInputStream( file );
return new InputStreamResource( inputStream );
}
}
文件正在生成,内容包含在 tomcat/bin 文件夹中,但出现异常。
java.lang.IllegalStateException: InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times.
我想在调用此端点后下载一个 .csv 文件。
欢迎提出任何建议。
谢谢你
【问题讨论】:
标签: java spring rest csv spring-mvc