5

次のようなhtmlフォームがあります。

<div class="field>
  <input id="product_name" name="product[name]" size="30" type="text"/>
</div>

<div class="field>
  <input id="product_picture" name="product[picture]" size="30" type="file"/>
</div>

製品の作成を自動化するJavaモジュールを作成したいと思います。これが私がすでに持っているものです:

HttpHost host = new HttpHost("localhost", 3000, "http");
HttpPost httpPost = new HttpPost("/products");
List<BasicNameValuePair> data = new ArrayList<BasicNameValuePair>();
data.add(new BasicNameValuePair("product[name]", "Product1"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(data, "UTF-8");
httpPost.setEntity(entity);
HttpResponse postResponse = httpClient.execute(host, httpPost); 

これは正常に機能し、「Product1」という名前の新しい製品を作成できます。しかし、アップロード部分の処理方法がわかりません。私はこのように見えるものが欲しいです:

data.add(new BasicNameValuePair("product[name]", "Product1"));

ただし、「Product1」の代わりにファイルです。文字列しかないというHttpClientのドキュメントを読みました。

アップロード部分の処理方法を知っている人はいますか?

4

2 に答える 2

8

依存関係:

<dependency>
 <groupid>org.apache.httpcomponents</groupid>
 <artifactid>httpclient</artifactid>
 <version>4.0.1</version>
</dependency>

<dependency>
 <groupid>org.apache.httpcomponents</groupid>
 <artifactid>httpmime</artifactid>
 <version>4.0.1</version>
</dependency>

コード:[トリッキーな部分はMultipartEntityの使用です]

HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION,HttpVersion.HTTP_1_1);
HttpPost post = new HttpPost( url );
MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
// For File parameters
entity.addPart( paramName, new FileBody((( File ) paramValue ), "application/zip" ));
// For usual String parameters
entity.addPart( paramName, new StringBody( paramValue.toString(), "text/plain", Charset.forName( "UTF-8" )));
post.setEntity( entity );
// Here we go!
String response = EntityUtils.toString( client.execute( post ).getEntity(), "UTF-8" );
client.getConnectionManager().shutdown();
于 2012-07-18T18:17:52.520 に答える
0

HTTP リクエストをいじるもう 1 つの高速な方法は、curlを使用することです。

于 2012-07-18T23:29:26.073 に答える