HttpClient 4.3.* 上传带中文文件名文件文件名乱码问题的解决
2014-03-04 10:06
911 查看
又是折腾了一天才解决的问题,网上关于这个问题的资料不多,希望写出来能帮到有需要的人。
之前无论怎么设置charset都不起作用,
后来看了这篇文章 才发现MultipartEntityBuilder有一个setMode的方法
可以设置成以浏览器兼容模式运行,设置后便不会乱码了。
下面是测试的源码:
之前无论怎么设置charset都不起作用,
后来看了这篇文章 才发现MultipartEntityBuilder有一个setMode的方法
可以设置成以浏览器兼容模式运行,设置后便不会乱码了。
下面是测试的源码:
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.HttpMultipartMode; 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.CharsetUtils; import org.apache.http.util.EntityUtils; public class FileUploadTest { /** * 这个例子展示了如何执行请求包含一个多部分编码的实体 模拟表单提交 * * @throws IOException */ public static void main(String[] args) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); try { // 要上传的文件的路径 String filePath = new String("D:\\吹风.gif"); // 把一个普通参数和文件上传给下面这个地址 是一个servlet HttpPost httpPost = new HttpPost( "http://localhost:8080/abc/updateUserBgImg"); // 把文件转换成流对象FileBody File file = new File(filePath); FileBody bin = new FileBody(file); StringBody userId = new StringBody( "用户ID", ContentType.create( "text/plain", Consts.UTF_8)); //以浏览器兼容模式运行,防止文件名乱码。 HttpEntity reqEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE) .addPart("multipartFile", bin) .addPart("userId", userId).setCharset(CharsetUtils.get("UTF-8")).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(); } } }
相关文章推荐
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- 解决httpclient上传文件的时候中文文件名乱码的问题
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- 解决上传文件时服务端中文文件名乱码问题
- PHP文件上传并解决中文文件名乱码问题
- 解决上传文件时服务端中文文件名乱码问题
- httpclient上传文件及文件名中文乱码问题
- 解决COS、FileUpload上传文件时中文文件名乱码问题
- 解决,文件上传到 ftp 服务器,中文出现乱码问题
- 中文乱码问题(使用Servlet3.0新特性实现文件上传——上传文件名中文乱码问题)
- FCKeditor for Java 中文文件名文件上传乱码问题
- PHP中完美解决fckeditor上传中文文件与新建中文目录出现乱码的问题
- SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法
- jsp实现文件下载与中文文件名乱码问题解决
- 解决swfupload上传控件文件名中文乱码问题 三种方法
- 上传文件,经过Zuul,中文文件名乱码解决办法
- 【成功解决】ubuntu 12.04 解压 zip 7z rar jar 文件,文件名中文乱码的问题
- 文件下载(解决中文文件名下载乱码问题) 收集
- 解压文件源码(需要引入ant.jar包,解决zip文件名为中文出现乱码问题)
- 实现文件下载与中文文件名乱码问题解决