Java 是否在响应后删除tmp文件?
我的用例:Java 是否在响应后删除tmp文件?,java,spring-mvc,spring-restcontroller,Java,Spring Mvc,Spring Restcontroller,我的用例: 在用户请求时创建tmp文件(我实际上不需要创建真正的文件,但我需要java.io.file实例) 处理此文件 以json格式返回文件和其他元数据 永久删除tmp文件 我的代码如下所示: @GetMapping(produces = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<MultiValueMap<String, Object>> regeneratePdfTest() throws
tmp
文件(我实际上不需要创建真正的文件,但我需要java.io.file
实例)tmp
文件@GetMapping(produces = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<MultiValueMap<String, Object>> regeneratePdfTest() throws IOException {
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
File tempFile = File.createTempFile("temp-file-name", ".tmp");
processFile(tempFile);
parts.add("file", new HttpEntity<>(new FileSystemResource(tempFile)));
parts.add("meta-data", new HttpEntity<>(someObject));
return new ResponseEntity<>(parts, HttpStatus.OK);
}
@GetMapping(products=MediaType.MULTIPART\u FORM\u DATA\u VALUE)
public ResponseEntity REGENTPDFTEST()引发IOException{
MultiValueMap parts=新链接的MultiValueMap();
File tempFile=File.createTempFile(“临时文件名”,“.tmp”);
进程文件(tempFile);
添加(“文件”,新的HttpEntity(新的FileSystemResource(tempFile));
添加(“元数据”,新的HttpEntity(someObject));
返回新的响应状态(零件,HttpStatus.OK);
}
(此代码是否适用于此情况?)
我知道File.deleteOnExit()
,但文档中说
根据Java语言规范的定义,只有在虚拟机正常终止时才会尝试删除
在我的情况下,我希望在响应后立即删除文件(文件有一些私人信息,我不想保留它们,也不想保留安全内存,因为我不再需要此文件)
文件大小可能非常大(超过200MB)
更新1:
如果发生错误,我也想删除文件。为什么需要创建文件。你们不能直接将
processFile(tempFile)
对文件所做的任何操作写入到响应中吗?我要求获取原始文件,进行一些更改并将其输出给用户。要进行这些更改,我需要java.io.File
,所以我决定:获取原始文件,制作副本,更改副本,输出副本,删除副本-这不是我真正需要的,但非常相似。我无法列出tmp
文件并重新使用它们,请求后我必须永久删除此tmp
。顺便说一句。如何输出到HttpEntity?在没有实际文件的情况下,有很多方法可以实现这一点。请参见以下示例:。为什么您不能读取原始文件,在内存中进行更改并写入响应?它太大了还是需要对其运行特殊的文件命令?