You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:42:16