开发者社区> 问答> 正文

微信公众平台上传多媒体文件问题 400 请求报错 

参考:微信公众平台文件上传接口文档
上传文件使用的是按照 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"}

不知道应该是哪一方面出错误?

展开
收起
kun坤 2020-05-29 17:55:40 775 0
1 条回答
写回答
取消 提交回答
  • 微信公众平台的上传服务是使用“\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

    2020-05-29 18:22:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
微信广告引擎与播放节奏算法实践 立即下载
微信H5视频播放器在海量业务下的实践 立即下载
微信高效运维之路 立即下载