node开发微信公众平台(上传素材的问题)
发布于 9 年前 作者 lileilei 7324 次浏览 最后一次编辑是 8 年前 来自 问答

思路:通过普通表单提交图片,在node端获取流转发给微信upload,得到返回值mediaid。 问题: 如何转发,数据格式是?用那个组件比较好用。我用的request。

微信这块整个流程大部分都已经搞定了。但是搞到推送的时候,需要mediaid ,微信的案例用的post,target到iframe,这块我不是很了解。而且网上说这样暴露的token,但是用了html5的new FormData() ,用ajax做了上传。转发的时候遇到了问题。整了几天无果。做前端好久没做过上传了,记得以前无刷新上传用的swfupload ,现在可以用html5的ajax上传了。但是如何中转给微信成了问题

5 回复

实在不行有个傻办法: 页面ajax上传图片,先将图片保存在服务器上,然后就将服务器本地的图片的上传给微信获取mediaid。

@huangshaohui 其实也不必先保存在服务器上。保存在服务器上之后,最终还是要把图片读进来,成为内存中的一块内容。

但借鉴一下这个思路,我们这里可以不搞流转发,而是等前端用户数据上传完之后,得到一个二级制内容的变量,再将这个变量提交给微信端。

如果我没记错的话,CNode 就是这个思路,楼主可以试试。

@alsotang 多谢你的回答,我就是这么整的。但是一直报找不到数据 代码如下 var formData={ media: { value: fs.createReadStream(req.files.media.path), options: { name:‘media’, filename: filename, contentType: req.files.media.type, filelength:req.files.media.size } } }; request.post({url:“https://api.weixin.qq.com/cgi-bin/media/upload?access_token="+token+"&type=image”, formData: formData}, function(err,httpResponse,body){ res.json(body); //此处一直报 {“errcode”:41005,“errmsg”:“media data missing”} 说是找不到数据 });

应该是我传的数据的格式有问题。微信文档实在看的有点 糊涂

var formData = {
    media: fs.createReadStream(imgUrl),
  };
  request.post({
    url:'https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token='+ access_token +'&type=image',
    formData: formData
    },
    function optionalCallback(err, resForMediaId, body) {
    if (err) {
      return console.error('upload failed:', err);
    }else {
      console.log(body);
    }
  });

body中就是你需要的media_id

回到顶部