Spring Boot大文件上传和下载支持

时间:2018-08-29 09:47:32

标签: spring-boot large-files

我有一个Spring Boot Web应用程序,它将处理大文件(最大5g)上载,然后将其保存到s3。请求和响应可能会持续很长时间。

那么处理这种上传和下载的最佳实践是什么?如何在下载或上传大文件时发挥良好的性能来防止服务器停机?

2 个答案:

答案 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。