nodejs 如何将微信获取临时素材接口中获取到的音频保存到服务器上?

xinbear
  • 345

我在微信前端将用户录音上传到了微信的服务器,但是微信只能保存三天,我想用nodejs将我上传的的这个临时录音保存到我的服务器上,我通过微信的获取临时素材接口获取到了微信返回给我的内容,可是我该如何将这些内容保存成音频文件到我的服务器上呢
以下是我调取微信接口的代码:

        https.get('https://api.weixin.qq.com/cgi-bin/media/get?access_token='+access_token+'&media_id='+media_id, function(res) {
            res.on('data', function(chunk){
                downsize += chunk.length;
                downchunks.push(chunk);
            });
            res.on('end', function(){
                var downdata = Buffer.concat(downchunks, downsize);
                // 获取到的微信返回的内容
                console.log(downdata.toString())
                console.log(downdata)
            });

        }).on('error', function(e) {
            console.log("Got error: " + e.message);
        });
        

console.log内容部分
clipboard.png

求大佬们指点一下~~万分感谢

回复
阅读 3.3k
4 个回答
✓ 已被采纳
        // 接收并转为mp3
        var myP = new Promise(function (resolve, reject) {
            var stream = request('https://api.weixin.qq.com/cgi-bin/media/get?access_token='+access_token+'&media_id='+media_id).pipe(fs.createWriteStream('public/music/'+openid+'_music.amr'));
            stream.on('finish', function () {
                var command = ffmpeg('public/music/'+openid+'_music.amr')
                    .on('end', function() {
                        console.log('file has been converted succesfully');
                    })
                    .on('error', function(err) {
                        console.log('an error happened: ' + err.message);
                    })
                    .save('public/music2/'+openid+'_music.mp3');
                resolve("OK123");
            });
        });
        
       

看打印的内容有“AMR”标记,所以猜应该是个二进制的amr音频文件,直接打包到formData里传到后台吧。另外尽量别传服务器,pv拉起来人多容易炸~可以考虑下对象存储。

使用 request.pipe

request.get('.../file.jpg').pipe(request.post('...myserver/upload'))

jakeen
  • 2
新手上路,请多包涵

楼主,问题解决了吗?我也有同样问题,请赐教

宣传栏