Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否在响应后删除tmp文件?_Java_Spring Mvc_Spring Restcontroller - Fatal编程技术网

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
    实例)
  • 处理此文件
  • 以json格式返回文件和其他元数据
  • 永久删除
    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?在没有实际文件的情况下,有很多方法可以实现这一点。请参见以下示例:。为什么您不能读取原始文件,在内存中进行更改并写入响应?它太大了还是需要对其运行特殊的文件命令?