使用Quarkus REST Client向Fortinet传文件时遇411 Length Required错误
问题:Quarkus调用Fortinet文件上传接口返回411 Length Required错误
调用Fortinet设备的文件上传接口时,收到如下错误:
411 Length Required
使用的Quarkus REST Client接口代码如下:
@RegisterRestClient(configKey = "external-api") @Path("upload") public interface ExternalApi { @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) Response submitFile(ClientMultipartForm form); } @ApplicationScoped public class SubmitFileHelper { @RestClient fortiNetApi fortiNetApi; public SubmitFileResponse submitFile(byte[] fileBytes, String originalFilename) { ClientMultipartForm form = createMultipartForm(fileBytes, originalFilename); return fortiNetApi.submitFile(form); } private ClientMultipartForm createMultipartForm(byte[] fileBytes, String originalFilename) { Buffer buffer = Buffer.buffer(fileBytes); return ClientMultipartForm.create() .binaryFileUpload("file", originalFilename, buffer, "application/octet-stream"); } }
调用submitFile(form)时持续收到上述411错误,且调试日志显示Content-Length已被正确设置。怀疑问题源于分块传输编码——Fortinet服务对HTTP协议约束严格,拦截了分块传输的请求。此前在Restlet中曾通过缓冲请求实体禁用分块传输解决类似问题,询问Quarkus是否有对应解决办法。
环境信息:
- Quarkus 3.19.4
- quarkus-rest-client-reactive
- Java 21
解决方案
修改Quarkus REST Client Reactive的最大分块大小属性,将其设置为一个确定大于文件负载总大小的值,以此强制Quarkus缓冲整个请求实体,避免使用分块传输编码。
具体操作是在项目的配置文件(如application.properties)中添加如下配置:
# 示例设置为10MB,根据实际上传文件的最大大小调整 quarkus.rest-client.external-api.chunked.max-size=10485760
当该属性值大于请求实体的总大小时,Quarkus会自动缓冲整个请求内容,并设置准确的Content-Length,从而绕过Fortinet对分块传输的限制。
内容的提问来源于stack exchange,提问作者BananKongen
相关产品推荐
相关产品推荐

