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;
-------------------------------------------------
上面高亮的两个地方就是在微信素材上传时的两个大坑。
1、当遇到乱码时,第一错觉就是设置请求的编码格式,恰恰在微信上传时,如果设置这个编码,就会导致多媒体文件丢失,上传不成功。(具体原因不明)
2、设置浏览器兼容模式,这个好多文章说,设置成BOWSER_COMPATIBLE 就不会乱码了,问题就出现在这里,设置模式时,应该设置成HttpMultipartMode.RFC6532
这样才是真正的不会出现乱码。
HttpClient上传文件到微信素材乱码问题解决相关推荐
- C# 使用HttpClient上传文件并附带其他参数的步骤
HttpClient和MultipartFormDataContent(传送门)最低适用于.NET Framework 4.5版本 发送端代码 using (HttpClient client = n ...
- xshell用rz上传文件,彻底解决乱码
1 安装 yum -y install lrzsz 2 问题 使用rz上传文件时,出现乱码,上传失败. 3 原因 文件中包含控制字符 4 解决方法 使用 rz -be -b:–binary 用bina ...
- springBoot上传文件时MultipartFile报空问题解决方法
springBoot上传文件时MultipartFile报空问题解决方法 参考文章: (1)springBoot上传文件时MultipartFile报空问题解决方法 (2)https://www.cn ...
- [转]httpclient 上传文件、下载文件
用httpclient4.3 post方式推送文件到服务端 准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/*** 上传文件 ...
- HttpClient上传文件传入MultipartFile类型
通常我们在使用httpclient的时候,一把都是使用get或者postd的方式传输一些数据.在近期的项目中有这样的一个需求,我需要通过httpclient去调用一个写好的文件上传的接口,接口中是使用 ...
- Zuul上传文件,中文文件名乱码解决办法
问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuul服务,上传中文名字的文件,文件名会出现乱码,最终导致上传失败,如果上传英文名字的文件,没有任何问题.怀疑网 ...
- WINDOWS上传文件到LINUX中文乱码
现象:WINDOWS上传文件到LINUX后,中文文件名乱码,中文内容乱码 解决:首先考虑到的应该是字符编码不一致导致,其次再看是否没安装中文包 1:检查是否安装convmv工具 [oracle@res ...
- C# HttpClient上传文件并附带其它参数
1.Fiddler抓包参数详情 Content-Type: multipart/form-data; boundary="8d9ade1fd906a6a" Content-Leng ...
- hdfs上传文件没有权限写入的问题解决put: Permission denied: user=root, access=WRITE
问题: 如题,在上传文件的时候出现没有权限写入的问题: 命令: hdfs dfs -put dummy_log_data /user/impala/data/logs/year=2013/month= ...
最新文章
- 本地连接出来的很慢解决方法
- 11.分页(10-10-12)
- 什么能在main()函数之前或之后执行
- debian jessie install note
- Spring Data Solr教程:分页
- [js] 用js写一个方法检测浏览器是否支持css3的属性
- 虎记:强大的nth-child(n)伪类选择器玩法
- 8004.ros2中添加boost依赖库写法
- es6删除数组某一项_「JavaScript 从入门到精通」10.数组
- Usually, these regular meetings do not have
- 对象转map工具类BeanUtil
- java基于springboot+vue的校园一卡通管理系统 ssm nodejs
- python日历教程_基于python实现简单日历
- 【zigbee无线通信模块步步详解】ZigBee3.0模块建立远程网络控制方法
- 读《当下的力量》有感
- 提高篇 第四部分 数据结构 第1章 树状树组
- P2P穿透StunServer
- 阿里物联网iot 网关配置 gateway 与子设备
- Linux运维 | 私人服务器搭建的全过程
- 从事了二年的Windows系统USB驱动开发