httpclient、httpmime 4.1.3
httpを介してリモートサーバーにファイルをアップロードしようとしていますが、成功しません。
これが私のコードです:
HttpPost method;
method = new HttpPost(solrUrl + "/extract");
method.getParams().setParameter("literal.id", fileId);
method.getParams().setBooleanParameter("commit", true);
MultipartEntity me = new MultipartEntity();
me.addPart("myfile", new InputStreamBody(doubleInput, contentType, fileId));
method.setEntity(me);
//method.setHeader("Content-Type", "multipart/form-data");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse hr = httpClient.execute(method);
サーバーはSolrです。
curl
これは、このように呼び出す動作中のbashスクリプトを置き換えるためのものです。
curl http://localhost:8080/solr/update/extract?literal.id=bububu&commit=true -F myfile=@bububu.doc
「Content-Type」「multipart/form-data」を設定しようとすると、受信側は境界がないことを示します(これは本当です)。
HTTP Status 500 - the request was rejected because no multipart boundary was found
このヘッダー設定を省略すると、サーバーは、私が発見した限り、コンテンツタイプがマルチパートではなかったことを示すエラーの説明を発行します[2]。
HTTP Status 400. The request sent by the client was syntactically incorrect ([doc=null] missing required field: id).
これは[1]に関連していますが、答えがわかりませんでした。私は考えていた、
私は同じ状況にありますが、何をすべきか理解していませんでした。MultipartEntityがHttpPostオブジェクトに、それがマルチパートであり、データを形成し、境界があることを通知することを期待していました。コンテンツタイプを自分で設定することはしませんでした。エンティティに境界を提供する方法がよくわかりませんでした。MultipartEntityにはsetBoundaryのようなメソッドがありません。または、ランダムに生成された境界を取得して、自分でaddHeaderで指定する方法-getBoundaryメソッドもありません...
[1] HttpClient4でファイルをアップロードする際のヘッダー「Content-Type」の設定に関する問題
[2] http://lucene.472066.n3.nabble.com/Updating-the-index-with-a-csv-file-td490013.html