2

我正在使用 apache httpclient 4.2 发送 Multipart HTTP PUT 请求。客户端必须上传 500 MB 左右的大尺寸二进制数据。因此需要压缩。我希望压缩整个 Multipart HTTP 请求并通过 header Content-Encoding: gzip 通知服务器。我控制服务器以及客户端代码。

注意:我知道我可以选择性地压缩大尺寸二进制数据而不是整个请求的方法,但现在我排除了这种方法。

httpclient 的 HttpRequestInterceptor 类不提供请求输入流的句柄或压缩请求的实体。

我在网上搜索并发现了一些相关链接(如下),但它们都不起作用 1. http://old.nabble.com/compressing-multipart-request-from-custom-client-tt27804438.html#a27811350 2. http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#protocol_interceptors - 这个链接说“协议拦截器还可以操作包含在消息中的内容实体 - 透明的内容压缩/解压缩是一个很好的例子。” 但不知道如何获得所需的功能。

如果可能的话,请给我一些指导,一些示例代码。

4

1 回答 1

2

我终于能够通过

  1. 创建一个 org.apache.http.entity.mime.MultipartEntity 对象 reqEntity。
  2. 将压缩的二进制部分添加到 HTTP 请求

    ByteArrayBody binaryData = new ByteArrayBody(compressedData, "binary/octet-stream", "N/A"); binaryParts.add(binaryData); reqEntity.addPart("uniqueId", binaryPart);

于 2014-03-17T23:39:27.970 回答