質問

単純な投稿リクエストを送信する単純なスニペットを作成しています。

現在、次のようにリクエストを作成しています。

    // Construct data
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");

    // Send data
    URL url = new URL("http://server:8080/servlet/upload");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();

    // do stuff with response....

今のところ、これは機能します。ただし、ファイルのアップロードをマルチパート POST リクエストとして追加する必要があります。これどうやってするの?使用は避けたい HttpClient できればコモンズから。

役に立ちましたか?

解決

現在、あなたはすべてのHTTPを使用していません。あなたがPOSTをするつもりならば、あなたはを行う必要がある最初の事はあなたが実際にHTTP接続に従事しているので、あなたは、正しいヘッダと、このようなを送信してください。あなたはRFC 1867に従ってくださいする必要があります( http://tools.ietf.org/html/rfc1867)正しくPOSTにファイルの内容をエンコードします。これはあなたのためにこれを行うそこにライブラリがある理由である、容易ではありません。なぜ避けるのHttpClientを:だから私は聞いていますか?私はいつも、この目的のためにそれを使用しました。それは、信頼性が完全でパフォーマンスです。あなたは(メモリ/ディスク)のスペースが不足している?

他のヒント

のポイントには、 RFCで指定された形式のデータでOutputStreamを構築する必要があります1687 RFC 2388 に。それは、多くの仕事だ、私はキックオフのコード例を投稿するつもりはありません、申し訳ありません:) RFCは、しかし、データがどのように見えるべきか明確な情報といくつかの例が含まれています。それは絶対になんとかです。

私の場合で働いていた。このようにこれを試してみてください。

File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);

このコード スニペットは私にとって役に立ちました。 プログラムでマルチパートリクエストを送信してファイルをアップロードする

外部依存関係はなく、コードはコメントを含めてわずか 150 行で、私の個人的な意見では、Apache HttpClient ライブラリよりもさらに扱いやすいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top