HttpClient中转上传文件,模拟form表单提交MultipartFile文件post到服务器。解决中文乱码问题
2019-05-16 15:51
1796 查看
在很多时候我们一个系统不单单只访问自己系统功能,需要访问别的系统,浏览器通常会报跨域请求问题。就需要先访问本系统,再通过后端调用其他系统接口。
场景:客户端A---->选择文件上传---->服务器B---->模拟form---->服务器C---->返回结果---->服务器B---->客户端A
最近突然接到这个项目,开始没有设置附件名的编码,总是出现中文乱码的问题。一直弄了很久,网上试了很多办法也没有解决,最后是把附件名作为参数设置Multipart EntityBuilder.addtextbody 的编码形式传参设置解决。
代码如下:
1、导入HttpCLient的jar包,在项目pom.xml设置以下属性
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.5</version> </dependency>
2、主要代码区域
@ApiOperation(value = "上传文件", notes = "上传文件") @ApiResponses({ @ApiResponse(code = 200, message = "成功") }) @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public Object upload(HttpServletRequest request, @RequestParam(value="file",required=false) MultipartFile file) throws BaseAppException, IllegalStateException, IOException { final String remote_url ="http://172.16.100.199:8089/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);// 文件流 //参数设置编码utf-8,不然中文会乱码 ContentType contentType = ContentType.create("text/plain",Charset.forName("UTF-8")); builder.addTextBody("filename", fileName,contentType);// 类似浏览器表单提交,对应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; }
相关文章推荐
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- HttpClient使用post方式模拟表单提交数据到服务器并下载服务器文件
- HttpClient PostMethod模拟带文件上传+普通字段的http请求(可解决文件为网络文件的问题)
- HttpClient使用post方式模拟表单提交数据到服务器并下载服务器文件
- httpurlconnection模拟post提交form表单(普通文本和上传文件) (
- HttpClient4.5.2版本中POST提交中文参数时乱码问题解决方法
- HttpClient4.5.2模拟表单post提交上传文件
- httpclient post 上传文件及参数包括中文乱码问题方案
- 解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!
- form表单提交的 get/post 方法(二)中文乱码的解决(2)
- 表单同时有中文字段和文件上传,加上enctype="multipart/form-data"后导致的中文乱码问题
- httpclient4 post提交请求乱码问题解决
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
- http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)
- httpClient中文乱码问题解决(wap提交)收藏
- 解决HttpClient工具中application/x-www-form-urlencoded表单提交时,请求参数中文乱码问题
- JAVA HTTPClient PostMethod 中文乱码问题解决方法
- HttpClient 4.3.6 使用MultipartEntityBuilder实现类似form表单提交方式的文件上传
- httpClient4.3 模拟Post提交,模拟Post上传文件并解决服务端使用spingMVC时upload.parseRequest(request)解析不到File,Pos简单抓取页面数据
- jQuery.form.js进行表单提交,中文乱码问题及解决