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

Spring boot Spring boot大文件上传和下载支持,spring-boot,large-files,Spring Boot,Large Files,我有一个SpringBootWeb应用程序,它将处理大文件(最大5g大小)上传,然后将其保存到s3。请求和响应可能会持续很长时间 那么,像这样处理上传和下载的最佳实践是什么呢?如何在下载或上载大文件时提高性能以防止服务器停机?您可以使用多部分/表单数据 @RequestMapping(value = "/agency/create", method = RequestMethod.POST, consumes = "multipart/form-data") public Respon

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


那么,像这样处理上传和下载的最佳实践是什么呢?如何在下载或上载大文件时提高性能以防止服务器停机?

您可以使用多部分/表单数据

 @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);
    }
@RequestMapping(value=“/agency/create”,method=RequestMethod.POST,consumes=“multipart/formdata”)
公共责任机构(
@RequestParam(value=“username”,required=true)字符串用户名,
@RequestParam(value=“pic1”,required=true)多部分文件pic1文件,
MultipartTTPServlet请求、模型和视图(模型和视图){
List requestKeys=new ArrayList();
List originalFileName=new ArrayList();
request.getFileNames().forEachRemaining(requestKeys::add);
for(字符串多部分文件:requestKeys){
add(request.getFile(multipartFile.getOriginalFilename());
}
storageService.store(pic1File);
返回新的ResponseEntity(原始文件名,HttpStatus.CREATED);
}

发布,以防将来有人发现这很有用。从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)
@RequestMapping(path=“/file upload/{depot}/{fileName}”,method={RequestMethod.POST,RequestMethod.PUT})
公共响应文件上载(
@PathVariable(name=“depot”)字符串depot,
@PathVariable(name=“fileName”)字符串文件名,
InputStream InputStream,
HttpServletRequest请求,
HttpServletResponse(响应)

上面是一个REST控制器的Spring引导配置,它为我进行大文件上传工作。密钥是直接添加InputStream InputStream。

我没有前端,它们都用作restful api。我将修改restful APIMultiPartFile的答案javadocs表示在多部分请求中收到的上传文件的表示形式。文件内容要么存储在内存中,要么临时存储在磁盘上。在这两种情况下,如果需要,用户负责将文件内容复制到会话级别或持久存储。临时存储将在请求处理结束时清除,因此这意味着文件首先上载到内存中,我认为要求是避免这种情况。