要在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%完成上传一次。 是否有任何一种机制在上传过程中创建此类事件?我可以覆盖一些内部弹簧方法使其工作吗?
答案 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
的所有其他成员复制到临时中,省略了监听器。