首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试通过spring-cloud-gateway和RestController上传文件

尝试通过spring-cloud-gateway和RestController上传文件
EN

Stack Overflow用户
提问于 2019-09-11 05:11:12
回答 1查看 1.2K关注 0票数 0

我正在尝试通过spring-boot网关上传(上传)一个文件,将请求转发到内部RestController (请参阅DemoController.java)。我可以读取数据,但连接保持打开。网关路由是通过application.yml配置的。

演示代码和curl请求可以在https://github.com/knottnhupfer/spring-boot-reactive-gateway-demo上找到

启动spring boot应用程序并调用:

代码语言:javascript
复制
curl --user user:secret -v http://localhost:8080/api/testing/README.md \
     --upload-file README.md

更新:

在此期间,我可以读取文件,但服务器端的连接并未关闭。这是反应式的正常行为吗?我需要主动关闭连接吗?我意识到用Mono包装它会关闭连接,但不再读取数据。

目前,RestController方法如下所示:

代码语言:javascript
复制
@PutMapping(value = "/{value}/**", consumes = "application/octet-stream")
public  Mono<ResponseEntity>  putArtifact(ServerHttpRequest request,
   @RequestBody ByteArrayResource resource, @PathVariable("value") String value) {
   [...]
}

提前进行Thx

/david

EN

回答 1

Stack Overflow用户

发布于 2020-03-19 16:30:37

简短的回答

解决方法是将-H 'Expect'添加到curl命令的末尾。

详细信息

这是关于Http 100继续状态代码。当服务器可能拒绝(可能是因为文件太大)时使用它,然后客户端可以首先询问服务器是否接受请求。因此,客户端和服务器都不会浪费它们的时间,例如:由于文件大小可能会被拒绝。

当你发送一个PUT请求时,默认情况下,curl adds将"Expect 100-continue“添加到请求中(如果大小大于某个阈值,也会在POST中添加)。我希望在这种情况下,服务器会响应Http 100,但看起来可能有一个issue in spring cloud gateway

-H 'Expect'添加到命令的末尾意味着您作为客户端将不再等待来自服务器的HTTP100状态发送您的请求。但这仍然是一个问题,其根本原因应该调查。可能是因为有两台服务器在处理HTTP 100 (网关+服务器),客户端不知何故挂断了。在this issue中也提到了这些

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57878258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档