春季启动时的文件上传进度

时间:2017-12-20 09:41:13

标签: java spring file spring-boot file-upload

要在spring boot中上传文件,可以使用以下内容:

@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
    RedirectAttributes redirectAttributes) {

    storageService.store(file);
    redirectAttributes.addFlashAttribute("message",
        "You successfully uploaded " + file.getOriginalFilename() + "!");

    return "redirect:/";
}

它工作正常。

我的问题是如何扩展此代码以在上传期间获得某种更新。例如:每10%完成上传一次。 是否有任何一种机制在上传过程中创建此类事件?我可以覆盖一些内部弹簧方法使其工作吗?

1 个答案:

答案 0 :(得分:1)

要获得进度更新回调,请将以下bean添加到您的应用程序中:

@Bean(name = "multipartResolver")
public CommonsMultipartResolver createMultipartResolver() {

  final CommonsMultipartResolver cmr = new CommonsMultipartResolver();

  cmr.setMaxUploadSize(10000000); // customize as appropriate
  cmr.setDefaultEncoding("UTF-8");  // important to match in your client
  cmr.getFileUpload().setProgressListener(
      (long pBytesRead, long pContentLength, int pItems) -> {
        // insert progress update logic here
      });

  return cmr;
}

还要将以下属性添加到应用程序属性中:

spring.http.multipart.enabled = false

注意:您的客户端应用程序与预期的内容编码(本例中为UTF-8)匹配非常重要。如果没有,那么将使用临时FileUpload对象而不是我们在上面的代码中自定义的对象。这可能是CommonsFileUploadSupport.java中的一个错误,因为它将原始FileUpload的所有其他成员复制到临时中,省略了监听器。