java Spring无法执行多部分项的清理

lhcgjxsq  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(256)

我正在向控制器发送multipartfile,当控制器中的逻辑完成时,spring调用错误:

2015-09-10 10:41:05 WARN  (StandardServletMultipartResolver.java:91) - Failed to perform cleanup of multipart items
java.io.IOException: UT010015: Could not delete file ....\Path\undertow6870903013120486522upload
    at io.undertow.servlet.spec.PartImpl.delete(PartImpl.java:111)

我的控制器:

@RequestMapping(value = "api/{name}/file", method = RequestMethod.POST,consumes="multipart/form-data")
 public ResponseEntity<?> receiveFile(@RequestParam(value = "file") MultipartFile multipartFile,
@PathVariable("name") String name) throws IOException {
    logic here
    return new ResponseEntity<>(HttpStatus.OK);
}

我使用AngularJS(ng-file-upload模块)发送文件:

file.upload = Upload.upload({
                            url: sUrl,
                            method: 'POST',
                            headers: {'Content-Type': '"multipart/form-data'},
                            file: file,
                            fileFormDataName: 'file'
                        });
vhmi4jdf

vhmi4jdf1#

您是否使用Tomcat或Undertow作为应用程序服务器?
如果是Undertow,它可能只是一个良性异常,通知您临时文件无法删除,因为它已经被删除(来源:https://github.com/spring-projects/spring-boot/issues/3966,其中还提到了一个bug ticket open UNDERTOW-542)。
我在使用fast配置文件运行基于jHipster的项目时遇到了同样的问题,该配置文件使用Undertow。一切都按预期工作,但引发了此错误。如果我使用dev配置文件,它使用Tomcat,则不会抛出任何错误。

vsikbqxv

vsikbqxv2#

当我开始使用Spring 4.3.1.RELEASEwildfly 9.x时,我遇到了同样的问题。
为了解决这个问题,我刚刚将我的Spring版本从4.2.2.RELEASE更新到4.2.3.RELEASE,解决了这个问题。

ilmyapht

ilmyapht3#

//这是我的服务类

@Override
public String uploadImage(String path, MultipartFile file) throws IOException {

    // File Name
    String name = file.getOriginalFilename();

    //Random name generate of file
      String randomID=UUID.randomUUID().toString();
      String fileName1= randomID.concat(name.substring(name.lastIndexOf(".")));
    
    // Full Path
    String filePath = path + File.separator + fileName1;

    // Create folder if not create
    File f = new File(path);
    if (!f.exists()) {
        f.mkdir();
    }

    
    // file copy

    Files.copy(file.getInputStream(), Paths.get(filePath));
    //System.gc();  //or 
    f.delete();
    /* I am resolve my exception using above System.gc(); or f.delete() method using both are working for me 
    */
    return fileName1;
}

相关问题