【发布时间】:2018-10-04 12:22:26
【问题描述】:
背景
这是@RestController 中定义的方法,它从磁盘读取文件然后流回。
@RequestMapping(value = "/bill", method = RequestMethod.GET)
public ResponseEntity<Object> getbill(){
...
InputStream in = new FileInputStream(file);
InputStreamResource inputStreamResource = new InputStreamResource(in);
httpHeaders.setContentLength(file.Length());
return new ResponseEntity(inputStreamResource, httpHeaders, HttpStatus.OK);
}
问题
我想在请求服务后删除文件,但找不到好地方。
我认为应该是在 inputStream 关闭之后 (https://github.com/spring-projects/spring-framework/blob/v4.3.9.RELEASE/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java#L117) 。由于文件是由 Inputstream 打开的,因此无法在上述方法中完成。
答案摘要 感谢大家对此的帮助。
接受的答案需要最少的更改并且运行良好。
【问题讨论】:
-
使用
ScheduledExecutorService?也许包装InputStreamResource并从close()方法中删除文件? -
FWIW:最好将工作从控制器转移到
@Service。这将使在生成返回的过程中删除文件变得微不足道。但是,我同意 Gerben Jongerius 下面的回答——GET 应该是幂等的; DELETE 是销毁文件的适当调用。
标签: java spring spring-restcontroller