我在通过zuul上传大文件时遇到了问题。我正在使用apache- commons文件上载(https://commons.apache.org/proper/commons- fileupload/)来流式传输大文件,以及在前面使用zuul。在我的Spring Boot应用程序中,我禁用了Spring提供的上传功能,以使用apache commons中的上传功能:
spring: http: multipart: enabled: false
控制器看起来像这样:
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); }
如果我直接(没有zuul)访问我的应用程序,则文件上传将按预期工作。但是,如果通过zuul访问它,则FileItemIterator没有要遍历的项目,并且请求立即完成并显示错误(ERR_CONNECTION_RESET)。对于zuul,我还禁用了Spring提供的multipart。否则,它将起作用。但是,不会流式传输文件。它们只有在我进入控制器后才被完全加载(常规的Spring行为)。有没有办法在zuul中使用apache- commons流选项?
我找到了解决方案。基本描述如下:
http://cloud.spring.io/spring-cloud-static/spring- cloud.html#_uploading_files_through_zuul
我做了什么使它工作。只需一步一步:
来自: http:// localhost:8081 / MyService / file
到: http:// localhost:8081 / zuul / MyService / file
以下标头不是必需的。传输编码:分块
我试图上传一个没有该文件的大文件,这很好。