我有一个Spring Boot Web应用程序,它将处理大文件(最大5g)上载,然后将其保存到s3。请求和响应可能会持续很长时间。
那么处理这种上传和下载的最佳实践是什么?如何在下载或上传大文件时发挥良好的性能来防止服务器停机?
答案 0 :(得分:1)
您可以使用多部分/表单数据
@RequestMapping(value = "/agency/create", method = RequestMethod.POST, consumes = "multipart/form-data")
public ResponseEntity<List<String>> createAgency(
@RequestParam(value = "username", required = true) String username,
@RequestParam(value = "pic1", required = true)MultipartFile pic1File,
MultipartHttpServletRequest request, ModelAndView modelAndView) {
List<String> requestKeys=new ArrayList<String>();
List<String> originalFileName=new ArrayList<String>();
request.getFileNames().forEachRemaining(requestKeys::add);
for(String multipartFile:requestKeys) {
originalFileName.add(request.getFile(multipartFile).getOriginalFilename());
}
storageService.store(pic1File);
return new ResponseEntity<List<String>>(originalFileName, HttpStatus.CREATED);
}
答案 1 :(得分:0)
发布以防将来有人发现这很有用。从 Spring Boot 2.4.2 开始,这适用于 REST 控制器。
类注释:
@RestController
@RequestMapping("/api")
方法声明:
@RequestMapping(path = "/file-upload/{depot}/{fileName}", method = {RequestMethod.POST, RequestMethod.PUT})
public ResponseEntity<String> fileUpload(
@PathVariable(name = "depot") String depot,
@PathVariable(name = "fileName") String fileName,
InputStream inputStream,
HttpServletRequest request,
HttpServletResponse response)
以上是适用于我上传大文件的 REST 控制器的 Spring Boot 配置。关键是直接添加InputStream inputStream。