<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.6</version>
</dependency>
package com.test;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ClientMultipartFormPost {
/**
* 这个例子展示了如何执行请求包含一个多部分编码的实体
* 模拟表单提交
* @throws IOException
*/
public static void main(String[] args) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
try{
//要上传的文件的路径
String filePath = "/Users/jjs/Downloads/feedbak_image.jpg";
//把一个普通参数和文件上传给下面这个地址 是一个servlet
HttpPost httpPost = new HttpPost("http://localhost:8080/feedback/add");
//把文件转换成流对象FileBody
FileBody bin = new FileBody(new File(filePath));
//普通字段 重新设置了编码方式
StringBody content = new StringBody("这里是一个评论", ContentType.create("text/plain", Consts.UTF_8));
//StringBody comment = new StringBody("这里是一个评论", ContentType.TEXT_PLAIN);
HttpEntity reqEntity = MultipartEntityBuilder.create()
.addPart("media", bin)//相当于<input type="file" name="media"/>
.addPart("content", content)
.build();
httpPost.setEntity(reqEntity);
System.out.println("发起请求的页面地址 " + httpPost.getRequestLine());
//发起请求 并返回请求的响应
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
System.out.println("----------------------------------------");
//打印响应状态
System.out.println(response.getStatusLine());
//获取响应对象
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
//打印响应长度
System.out.println("Response content length: " + resEntity.getContentLength());
//打印响应内容
System.out.println(EntityUtils.toString(resEntity,Charset.forName("UTF-8")));
}
//销毁
EntityUtils.consume(resEntity);
} finally {
response.close();
}
}finally{
httpClient.close();
}
}
}