我遇到了通过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给出的多部分。否则,它的工作原理。但是,文件未流式传输。只有在我进入控制器(常规的Spring行为)之后才会完全加载它们。有没有办法在zuul中使用apache-commons流选项?
答案 0 :(得分:8)
我找到了解决方案。 它基本上在这里描述:
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
保留禁用Spring分段上传:
spring:
http:
multipart:
enabled: false
不需要以下标题。 Transfer-Encoding:chunked
我尝试上传没有那个的大文件,这很好。