首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Express API和ytdl下载音频文件

使用Express API和ytdl下载音频文件
EN

Stack Overflow用户
提问于 2016-12-11 23:28:13
回答 1查看 6.2K关注 0票数 5

我正在尝试使用ytdl-core模块(https://github.com/fent/node-ytdl-core)下载Youtube视频音频。

我使用Express编写了一个API,它允许我通过其URL下载音频:

代码语言:javascript
复制
app.get('/api/downloadYoutubeVideo', function (req, res) {
   res.set('Content-Type', 'audio/mpeg');       

   var videoUrl = req.query.videoUrl;   
   var videoName;

   ytdl.getInfo(videoUrl, function(err, info){
        videoName = info.title.replace('|','').toString('ascii');
        res.set('Content-Disposition', 'attachment; filename=' +    videoName + '.mp3');    
   });  

   var videoWritableStream = fs.createWriteStream('C:\\test' + '\\' +   videoName); // some path on my computer (exists!)
   var videoReadableStream = ytdl(videoUrl, { filter: 'audioonly'});

   var stream = videoReadableStream.pipe(videoWritableStream);

});

问题是,当我调用这个API时,我从服务器上得到一个504错误。

我希望能够保存这个下载的音频在我的本地磁盘。

我会感谢你的帮助。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 14:27:42

由于某种原因,videoName没有定义,所以它扰乱了我的功能.以下是一些更改后的正确代码,并将目标路径添加为查询变量。

代码语言:javascript
复制
app.get('/api/downloadYoutubeVideo', function (req, res) {  
   var videoUrl = req.query.videoUrl;   
   var destDir = req.query.destDir; 

   var videoReadableStream = ytdl(videoUrl, { filter: 'audioonly'});

   ytdl.getInfo(videoUrl, function(err, info){
       var videoName = info.title.replace('|','').toString('ascii');

       var videoWritableStream = fs.createWriteStream(destDir + '\\' + videoName + '.mp3'); 

       var stream = videoReadableStream.pipe(videoWritableStream);

       stream.on('finish', function() {
           res.writeHead(204);
           res.end();
       });              
   });              
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41092293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档