node服务器如何上传网络素材到微信服务器

我们先看一下微信上传素材的要求:

这里写图片描述

显然在js代码里我们用不了上面的代码,找了很多curl相关的库也没搞定。
下面是上传文件的最终解决方案:

如何上传文件

引入三个我们要使用的库

var request = require('request');//http请求库
var fs = require('node-fs');//文件操作库
var formstream = require('formstream');//http发送post请求构造表单数据的库

发送参数里要求form-data中媒体文件标识有,filename,filelength,content-type等信息
下面是关键的代码了

fs.stat(filePath, function (err, stat) {
            var url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}'.format(access_token, uploadType);//uploadType就是媒体文件的类型,image,voice等
            var form = formstream();
            form.file('media', filePath, fileName, stat.size);//将文档中媒体文件需要的filename,filelength参数加到要上传的表单,content-type不知道为啥没有,可能自带吧
            var upload = request.post(url, {headers: form.headers()}, function (err, httpResponse, body) {
                if (err) {
                    return console.error('上传失败:', err);
                }
                console.log('上传成功!服务器相应结果:', body);
            });
            form.pipe(upload);
        });

至此我们就完成了媒体文件的上传。

保存网络文件到node服务器

那么从上面的方法来看,只能上传在服务器已经存在的文件,所以有些网络文件我们需要手动保存到服务器上,如何保存呢?这就用到了node-fs库了,代码如下:

var url = fileUrl;//文件的url地址,下面的代码中,我们用pipe管道的方式把url请求过来的数据写入到本地
//创建目录
fs.exists(path, function(exists){
        if(exists){
            request(url).pipe(fs.createWriteStream(path + '/' + filename));
        } else {
            fs.mkdir(path, function () {
                request(url).pipe(fs.createWriteStream(path + '/' + filename));
            });
        }
    });

OK,至此我们完成了保存网络文件的功能。
结合上面的上传功能,我们就完成了把网络素材上传到微信服务器的功能,这样我们可以再获取素材对公从号粉丝进行相关的内容推送。node可能还有别的上传素材到微信服务器的方法,但是从网上看没找到相关博客和文档。

如果有什么不明白的或者新的想法,可以留言,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值