1

マルチパートをチャンクモードで投稿するにはどうすればよいのでしょうか。私には 3 つの部分があり、ファイルは大きくなる可能性があるため、チャンクで送信する必要があります。

ここで私がすること:

    MultipartEntity multipartEntity = new MultipartEntity() {
        @Override
        public boolean isChunked() {
            return true;
        }
    };

    multipartEntity.addPart("theText", new StringBody("some text", Charset.forName("UTF-8")));

    FileBody fileBody1 = new FileBody(file1);
    multipartEntity.addPart("theFile1", fileBody1);

    FileBody fileBody2 = new FileBody(file2);
    multipartEntity.addPart("theFile2", fileBody2);

    httppost.setEntity(multipartEntity);

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpClient httpClient = new DefaultHttpClient(params);

    HttpResponse httpResponse = httpClient.execute(httppost);

サーバー側では、3つの部分を受け取りますが、たとえばファイルはチャンクされず、1つのピースとして受信されます...基本的に合計で、4つの境界のみが表示されます:3 --xxx、最後に1 --xxx -- . 私は isChunked のオーバーライドがうまくいくと思っていましたが、そうではありません... ;(

私がやろうとしていることは実行可能ですか? どうすればそれを機能させることができますか?

どうもありがとう。ファブ

4

2 に答える 2

2

チャンク化されたマルチパートボディを生成するには、パーツの1つでサイズを使用できないようにする必要があります。ストリーミングしている部分のように。

たとえば、file2が本当に大きなビデオであると仮定します。コードの一部を置き換えることができます。

FileBody fileBody2 = new FileBody(file2);
multipartEntity.addPart("theFile2", fileBody2);

そのコードで:

final InputStreamBody binVideo = new InputStreamBody(new FileInputStream(file2), "video/mp4", file2.getName());
multipartEntity.addPart("video", binVideo);

3番目の部分はFileではなくInputStreamであるため、マルチパートHTTPリクエストにはヘッダーTransfer-Encoding:chunkedが含まれます。

于 2012-07-18T19:02:48.753 に答える
0

通常、適切なサーバー側の HTTP フレームワーク (Java EE サーブレット API など) は、転送コーディングなどのトランスポートの詳細をアプリケーション コードから隠します。コンテンツ ストリームからの読み取りによってチャンク区切り文字が表示されないからといって、そのチャンク コーディングが基礎となる HTTP トランスポートで使用されていないことを意味するわけではありません。

ここで説明されているようにワイヤ ログを有効にすることで、HttpClient が生成する HTTP パケットの種類を正確に確認できます。

http://hc.apache.org/httpcomponents-client-ga/logging.html

于 2011-08-26T13:57:05.250 に答える