HttpClient上传文件到微信素材乱码问题解决

在开发微信第三方公众平台的时候,须要上传图片、语音等文件到微信服务器。当文件名存在中文时会出现乱码。网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各类方式,依然是乱码。浏览器

全部的文章在微信这个场景上都有两个大坑。
下面我copy下别人的代码,而后标注出来:
原文连接以下:http://blog.csdn.net/fengyuzhengfan/article/details/40792529服务器

HttpClient的上传代码,基本上都相似,我就不重复写了,直接贴一段他的代码:微信

-------------------------------------------------
ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);        
HttpClient client=new DefaultHttpClient();// 开启一个客户端 HTTP 请求   
HttpPost post = new HttpPost(url);//建立 HTTP POST 请求    
MultipartEntityBuilder builder = MultipartEntityBuilder.create();  
builder.setCharset(Charset.forName(HTTP.UTF_8));//设置请求的编码格式  
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式  
int count=0;  
for (File file:files) {  
//          FileBody fileBody = new FileBody(file);//把文件转换成流对象FileBody  
//          builder.addPart("file"+count, fileBody);  
    builder.addBinaryBody("file"+count, file);  
    count++;  
}         
builder.addTextBody("method", params.get("method"));//设置请求参数  
builder.addTextBody("fileTypes", params.get("fileTypes"));//设置请求参数  
StringBody stringBody=new StringBody("中文乱码",contentType);  
builder.addPart("test", stringBody);  
HttpEntity entity = builder.build();// 生成 HTTP POST 实体        
post.setEntity(entity);//设置请求参数  
HttpResponse response = client.execute(post);// 发起请求 并返回请求的响应  
if (response.getStatusLine().getStatusCode()==200) {  
    return true;  
}  
return false;  
-------------------------------------------------post

上面高亮的两个地方就是在微信素材上传时的两个大坑。ui

一、当遇到乱码时,第一错觉就是设置请求的编码格式,偏偏在微信上传时,若是设置这个编码,就会致使多媒体文件丢失,上传不成功。(具体缘由不明)
二、设置浏览器兼容模式,这个好多文章说,设置成BOWSER_COMPATIBLE 就不会乱码了,问题就出如今这里,设置模式时,应该设置成HttpMultipartMode.RFC6532
这样才是真正的不会出现乱码。编码

好了,把上面指出来的两个地方改一下,微信素材上传中文乱码问题解决了。有遇到一样状况的,能够试下。url

 

而后有些代码还在用MultipartEntity这个弃用的类,建议改为新的MultipartEntityBuilderspa

简便写法:.net

HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532).addPart("media", bin).build();对象

不要设置编码,模式设置要注意

不要设置编码,模式设置要注意

不要设置编码,模式设置要注意

重要的话要重复三遍?

相关文章
相关标签/搜索