参考:微信公众平台文件上传接口文档
上传文件使用的是按照 multipart/form-data 的方式进行的,也就是一般的上传文件用的方式。然后,参考node-request中使用如下代码进行上传:
var r = request.post({ url: "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + access_token + "&type=image", // json: true, headers: { 'accept': '/' } }, function (err, res, body) { console.log(body); }); r.form().append('media', fs.createReadStream("/usr/share/pixmaps/debian-logo.png"));但是服务器依然返回
{"errcode":41005,"errmsg":"media data missing"}不知道应该是哪一方面出错误?
微信公众平台的上传服务是使用“\r\n”结尾的,只有遇到了“\r\n”以后才会停止对 form-data 的解释,而 node-form-data 的默认实现是不发送最后的“\r\n”的,因此,微信的服务器并不能对这种请求进行完整解释。这个应该算是微信服务器的 bug 。
解决办法就是找到一种方法使微信服务器完整地接受 form-data 的 media 参数部分。一种潜在的方法是再增加一个 form-data 的参数,使得微信能够完整地处理 media 的部分。
例如:
var r = request.post({ url: "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + access_token + "&type=image", // json: true, headers: { 'accept': '/' } }, function (err, res, body) { console.log(body); }); var form = r.form(); form.append('media', fs.createReadStream("/usr/share/pixmaps/debian-logo.png")); form.append('hack', '');这样就可以解决上传的问题了。######为什么我在本地测试可以上传.放到服务器上就传不上了41005
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。