HttpClient中转上传文件
2016-06-30 10:32
295 查看
场景:客户端(浏览器)A---->选择文件上传---->服务器B---->中转文件---->服务器C---->返回结果---->服务器B---->客户端A
有时候在项目中需要把上传的文件中转到第三方服务器,第三方服务器提供一个接收文件的接口。
而我们又不想把文件先上传到服务器保存后再通过File来读取文件上传到第三方服务器,我们可以使用HttpClient来实现。
因为项目使用的是Spring+Mybatis框架,文件的上传采用的是MultipartFile,而FileBody只支持File。
所以这里采用MultipartEntityBuilder的addBinaryBody方法以数据流的形式上传。
这里需要引入两个jar包:httpclient-4.4.jar和httpmime-4.4.jar
Maven pom.xml引入
上传代码:
有时候在项目中需要把上传的文件中转到第三方服务器,第三方服务器提供一个接收文件的接口。
而我们又不想把文件先上传到服务器保存后再通过File来读取文件上传到第三方服务器,我们可以使用HttpClient来实现。
因为项目使用的是Spring+Mybatis框架,文件的上传采用的是MultipartFile,而FileBody只支持File。
所以这里采用MultipartEntityBuilder的addBinaryBody方法以数据流的形式上传。
这里需要引入两个jar包:httpclient-4.4.jar和httpmime-4.4.jar
Maven pom.xml引入
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.4</version> </dependency>
上传代码:
/** * 中转文件 * * @param file * 上传的文件 * @return 响应结果 */ public String httpClientUploadFile(MultipartFile file) { final String remote_url = "http://192.168.1.99:8080/demo/file/upload";// 第三方服务器请求地址 CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; try { String fileName = file.getOriginalFilename(); HttpPost httpPost = new HttpPost(remote_url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流 builder.addTextBody("filename", fileName);// 类似浏览器表单提交,对应input的name和value HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost);// 执行提交 HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { // 将响应内容转换为字符串 result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8")); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
相关文章推荐
- 使用Nginx实现HTTPS双向验证的方法
- 编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程
- 问题“The method getDispatcherType() is undefined for the type HttpServletRequest”
- 神经网络入门(连载之六)
- 神经网络入门(连载之五)
- 计算机网络面试
- 神经网络入门(连载之四)
- 神经网络入门(连载之三)
- 神经网络入门(连载之二)
- 神经网络入门(连载之一)
- 获取网络链接状态
- Android缓存方案-网络请求缓存
- 网页http请求的整个过程
- 解决windows未识别的网络问题
- tcpdump:理论、自动抓包及业务架构树的生成
- 很不错的hadoop学习网站:http://www.weixuehao.com/archives/111
- Linux 802.1Q VLAN网络报文收发分析
- 研读《基于flume网络安全可视化系统》----小结
- 网络Xutils解析Xml文件
- java 发送http请求以及请求参数值出现乱码