1、Using the AddPart Method
form表单上传两个文本、一个文件:
/**
* 上传文件及文本
* @throws ClientProtocolException
* @throws IOException
* @author ybwei
*/
@Test
public void uploadFileAndText() throws ClientProtocolException, IOException {
String textFileName = "1.txt";
// 创建HttpClient对象
CloseableHttpClient client = HttpClients.createDefault();
File file = new File(textFileName);
HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);
StringBody stringBody2 = new StringBody("Message 2", ContentType.MULTIPART_FORM_DATA);
//
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("upfile", fileBody);
builder.addPart("text1", stringBody1);
builder.addPart("text2", stringBody2);
HttpEntity entity = builder.build();
//
post.setEntity(entity);
HttpResponse response = client.execute(post);
entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println(result);
}
2、Using the addBinaryBody and addTextBody Methods
2.1上传文本及文件
/**
* @throws ClientProtocolException
* @throws IOException
* @author ybwei
*/
@Test
public void addBinaryBody() throws ClientProtocolException, IOException {
String textFileName = "d:/1.txt";
// 创建HttpClient对象
CloseableHttpClient client = HttpClients.createDefault();
File file = new File(textFileName);
HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, textFileName);
builder.addTextBody("text", message, ContentType.DEFAULT_BINARY);
//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println(result);
}
2.2 Uploading a Zip File, an Image File, and a Text Part
/**
* @throws ClientProtocolException
* @throws IOException
* @author ybwei
*/
@Test
public void addZip() throws ClientProtocolException, IOException {
String zipFileName="d:/1.zip";
String imageFileName="d:/1.jpg";
// 创建HttpClient对象
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
InputStream inputStream = new FileInputStream(zipFileName);
File file = new File(imageFileName);
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, imageFileName);
builder.addBinaryBody("upstream", inputStream, ContentType.create("application/zip"), zipFileName);
builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println(result);
}
2.3 Uploading a Byte Array and Text
/**
* 上传byte和text
* @author ybwei
* @throws IOException
* @throws ClientProtocolException
*/
@Test
public void uploadByteAndText() throws ClientProtocolException, IOException {
String textFileName = "1.txt";
// 创建HttpClient对象
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
String message = "This is a multipart post";
byte[] bytes = message.getBytes();
//
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", bytes, ContentType.DEFAULT_BINARY, textFileName);
builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println(result);
}
3、controller接收
@RequestMapping(value = "/uploadByteAndText", method = RequestMethod.POST)
public String uploadByteAndText(@RequestParam("upfile") MultipartFile uploadFile, @RequestParam("text") String id) {
String result = "OK";
InputStream fis = null;
OutputStream outputStream = null;
try {
fis = uploadFile.getInputStream();
outputStream = new FileOutputStream("D:\\1\\" + uploadFile.getOriginalFilename());
IOUtils.copy(fis, outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}