使用ytdl在节点js中下载youtube视频文件

时间:2017-06-17 13:52:21

标签: node.js video youtube request

我想让用户能够使用node-ytdl下载YouTube视频。 例如,当客户端对某个路由发出GET请求时,应该下载视频作为响应。

  var ytdl = require('ytdl-core');
  var express= require('express');

   //Init App Instance
    var app=express();



 app.get('/video',function(req,res){


 var ytstream=ytdl("https://www.youtube.com/watch?v=hgvuvdyzYFc");


ytstream.on('data',function(data){
   res.write(data);
})

ytstream.on('end',function(data){
    res.send();
})

})

以上是我的nodejs代码。即使在网络中它似乎下载响应它不会使用户下载为文件。我不想在服务器上存储任何文件。如果有人可以帮助我如何解决问题,那将是很好的。

2 个答案:

答案 0 :(得分:0)

好,因此创建一个数组,然后在data事件上向其中添加数据。在end上发送数组。这是一个示例:

const ytdl = require("ytdl-core"),
      app = require("express")();

app.get("/video", (req, res) => {
  let arr = [], vid = ytdl("https://www.youtube.com/watch?v=hgvuvdyzYFc");
  vid.on("data", d => arr.push(d));
  vid.on("end", () => res.send(arr));
});

答案 1 :(得分:0)

res对象是可写的流,因此您可以像这样直接将ytdl的输出通过管道传递给res对象-

    ytdl("http://www.youtube.com/watch?v=xzjxhskd")
      .on("response", response => {
        // If you want to set size of file in header
        res.setHeader("content-length", response.headers["content-length"]);
      })
      .pipe(res);