1

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

4

1 に答える 1

1

疑わしい

method.getParams().setParameter("literal.id", fileId);
method.getParams().setBooleanParameter("commit", true);

最初の行でfileId、文字列またはファイルポインタ(または他の何か)ですか?文字列だといいのですが。2行目は、通常のパラメータを設定することもできます。


私はに取り組んでいHTTP Status 400ます。私はJavaをあまり知りません(またはそれは.Netですか?)

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

于 2012-06-11T07:28:05.640 に答える