を使用して、HTTPS上のストリームとして、私はマルチパートとしてファイルアップロードを受け付け、HTTPS接続でRESTサービスを持っている(すなわちファイルのメタデータとファイル自体)RESTサービス - マルチパートポスト(JSONとファイル)ジャージー
どのようにすることができますJersey(websphereの場合)またはHttpClientを使用してRESTサービスを呼び出し、マルチパートとしてファイルを送信します。私は1GB以上のファイルを持つことができるので、さまざまなサイズの複数のストリームとしてファイルを送信したい。さらに、RESTサービスは認証にWindows NT認証を使用しており、httpsを使用しています。
どのように私はこれを達成することができます例を与えることができますか?私はmultipart httpClientを使用しています。ストリームとして送信することはできません。以下は、httpClientを使用している私のコードです4.5.2
===============================
InputStream stream = new FileInputStream("test.doc");
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setStrictMode();
InputStreamBody streamBody = new InputStreamBody(stream, docHandler.getFilename());
FormBodyPart filePart = FormBodyPartBuilder.create()
.setName("Binary")
.addField(Constants.RETRIEVAL_NAME_FIELD, "test.doc")
.addField("Content-Type",docHandler.getContentType())
.setBody(streamBody)
.build();
entityBuilder.addPart(filePart);
HttpPost httpPostRequest = new HttpPost();
httpPostRequest.setEntity(entityBuilder.build());
httpClient.execute(httpPostRequest);
=================== このコードを実行すると、私は、次のようなエラーに
org.apache.http.client.NonRepeatableRequestExceptionを取得しています:私はこのエラーを取得していますなぜ非反復要求エンティティ
で任意のアイデアを、要求を再試行することはできません。ストリームをバイト配列に変換してByteArrayBodyを代わりに使用するとうまくいきますが、Fiddlerでは3つの要求呼び出しがサーバーに対して行われ、ファイルの内容全体がコピーされるたびに呼び出されます。したがって、ファイルが1GBの場合、コンテンツ全体がサーバーに3回送信されます。
第1に、1つの呼び出しでファイル全体が送信されないように、大きなファイルをチャンクまたは複数のストリームで送信する方法を教えてください。第二に、NTLM認証用のサーバーへの3回の呼び出しを避ける方法はありますか?
任意のポインタ?
乾杯!
[Jersey 2 Multipart upload Client](https://stackoverflow.com/questions/24637038/jersey-2-multipart-upload-client) – andih
の可能な複製です。このリンクは単純なHTTP接続を使用しています。認証を持っている。私の場合、RESTfulなサービスはhttps上にあり、NTLM認証メカニズムを使用しています。 NTLM認証メカニズムを使用してhttps上のRESTサービス経由でファイルをストリームとしてアップロードする(私は入力ストリームです)良い例はありますか?また、クライアントJavaアプリケーションが実行されるwebsphereもあります。サーバーは.Netに実装されています。 – sab123
Apache HTTPクライアントはhttpとhttpsをサポートしています。ほとんどの場合、コードを変更する必要はありません。 NTLM認証は、httpの「上」のものです。 Apache Http Clients Version> 4.1(4.2.3)のサポート[NTLM](https://hc.apache.org/httpcomponents-client-ga/ntlm.html)。 1つの質問内で異なることを求めているようです。チャンクのアップロードはどのように重複していますか? NTLM認証スキームについては、[ここ](https://www.innovation.ch/personal/ronald/ntlm.html)を参照してください。 3回の呼び出しを避けることができれば。答えは「いいえ」です。より具体的な質問をする必要があります。 – andih