gpt4 book ai didi

java - 多部分实体 : Content-Length for InputStream

转载 作者:行者123 更新时间:2023-12-03 20:38:23 25 4
gpt4 key购买 nike

我正在尝试将输入流中的数据发送到多部分/表单数据中,作为文件参数使用:

MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.addBinaryBody("file", inputStream)
.build();

问题是服务器似乎需要一个 Content-Length header 。我知道我的 inputStream 的正确大小 - 我可以手动设置吗?

最佳答案

而不是使用 addBinaryBody方法,您可以创建自己的FormBodyPartContentBody .合适的ContentBodyInputStreamBody但它的 getContentLength方法返回 -1 .

我建议您扩展该类以提供自定义内容长度。

class KnownSizeInputStreamBody extends InputStreamBody {   
private final long contentLength;

public KnownSizeInputStreamBody(InputStream in, long contentLength, ContentType contentType) {
super(in, contentType);
this.contentLength = contentLength;
}

@Override
public long getContentLength() {
return contentLength;
}
}

然后,您可以将多部分实体创建为
FormBodyPart bodyPart = FormBodyPartBuilder.create().setName("file")
.setBody(new KnownSizeInputStreamBody(inputStream, contentLenth, ContentType.APPLICATION_OCTET_STREAM)).build();

HttpEntity entity = MultipartEntityBuilder.create().addPart(bodyPart).build();

视情况而定(您自己的内容类型、内容长度、名称等)。

在我的情况下,http 客户端为整个多部分请求正文编写了内容长度,而不是为每个部分编写。

关于java - 多部分实体 : Content-Length for InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com