我正在使用Spring + apache commons文件上传编写API。
https://commons.apache.org/proper/commons-fileupload/
我遇到了一个问题。我需要验证文件大小。如果它比我配置的更大,则用户应该收到错误。 现在,我实现了没有这个检查的上传,它看起来像这样:
public ResponseEntity insertFile(@PathVariable Long profileId, HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator uploadItemIterator = upload.getItemIterator(request);
if (!uploadItemIterator.hasNext()) {
throw new FileUploadException("FileItemIterator was empty");
}
while (uploadItemIterator.hasNext()) {
FileItemStream fileItemStream = uploadItemIterator.next();
if (fileItemStream.isFormField()) {
continue;
}
//do stuff
}
return new ResponseEntity(HttpStatus.OK);
}
它完全符合我的需要。它不需要我将文件完全加载到内存中。我使用InputStream,我进一步转移到另一个服务。最终,我没有在任何时候将文件完全加载到内存中。 但是,这使我无法获得已加载的咬伤总数。
有没有办法处理此类验证而无需完全下载文件或将其保存在某处?
我尝试过FileItem,但确实需要完整加载文件。
答案 0 :(得分:1)
ServletFileUpload有一个方法setSizeMax,它控制每个请求接受的最大文件大小。为了缓解内存消耗问题,您可以使用DiskFileFactory为较大的文件设置磁盘文件存储。您必须始终获取文件,因为信任标题只是不可靠但我认为这将完成工作:)