Spring Boot的默认MultiPartResolver接口通过将多部分文件存储在本地文件系统中来处理这些文件的上传。在输入控制器方法之前,整个多部分文件必须完成上载到服务器。
我们将所有上传的文件直接存储到数据库,并且服务器的磁盘配额非常小,因此,如果上传的文件很大,则会看到IOExeption - Disk quota exceeded。
IOExeption - Disk quota exceeded
在Spring的MultiPartResolver将文件存储到本地文件系统上之前,是否有一种方法可以直接从客户端的传入请求获取流,以便我们可以直接将其流传输到数据库?
您可以直接使用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