一尘不染

Spring-如何在不存储在本地文件系统上的情况下将大型的多部分文件上传流传输到数据库

spring-boot

Spring
Boot的默认MultiPartResolver接口通过将多部分文件存储在本地文件系统中来处理这些文件的上传。在输入控制器方法之前,整个多部分文件必须完成上载到服务器。

我们将所有上传的文件直接存储到数据库,并且服务器的磁盘配额非常小,因此,如果上传的文件很大,则会看到IOExeption - Disk quota exceeded

在Spring的MultiPartResolver将文件存储到本地文件系统上之前,是否有一种方法可以直接从客户端的传入请求获取流,以便我们可以直接将其流传输到数据库?


阅读 277

收藏
2020-05-30

共1个答案

一尘不染

您可以直接使用apache,如此处所述https://commons.apache.org/proper/commons-
fileupload/streaming.html。

@Controller
public class UploadController {

    @RequestMapping("/upload")
    public String upload(HttpServletRequest request) throws IOException, FileUploadException {

        ServletFileUpload upload = new ServletFileUpload();

        FileItemIterator iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();

            if (!item.isFormField()) {
                InputStream inputStream = item.openStream();
                //...
            }
        }
    }
}

确保禁用弹簧多段分解机构。

application.yml:

spring:
   http:
      multipart:
         enabled: false
2020-05-30