响应后删除tmp文件?

问题描述 投票:0回答:1

我的用例:

  1. 根据用户请求创建
    tmp
    文件(我真的不需要创建真实文件,但我需要有
    java.io.File
    实例)
  2. 处理此文件
  3. 以 json 形式返回文件和其他元数据
  4. 永久删除
    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);
}

(这段代码最适合这种情况吗?)

我知道

File.deleteOnExit()
,但文档说

仅在虚拟机正常终止时尝试删除,如 Java 语言规范所定义

就我而言,我想在响应后立即删除文件(文件有一些私人信息,我不想保留它们,也是安全内存,因为我不再需要这个文件)。

文件大小可能非常大(超过 200MB)。

更新1: 如果发生错误我也想删除文件。

java spring-mvc spring-restcontroller
1个回答
0
投票
使用后可以使用 .delete() 方法删除该文件。 如果出现错误,您也想删除它,您可以使用 try catch 并将删除方法也放在 catch 中。 在删除之前不要忘记 .close() 与文件相关的流,否则它不会让你删除它。此外,delete() 方法返回布尔值 true 或 false,如果删除成功或失败,您可以使用该信息来管理日志记录错误或其他操作。

© www.soinside.com 2019 - 2024. All rights reserved.