HttpClient上传文件

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值