首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ytdl在node js中下载youtube视频文件

使用ytdl在node js中下载youtube视频文件
EN

Stack Overflow用户
提问于 2017-06-17 21:52:21
回答 3查看 3K关注 0票数 2

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

代码语言:javascript
复制
  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代码。即使在网络中它似乎下载的回应,它并没有使用户下载为文件。我不想存储任何文件在server.It上,如果有人可以帮助我如何解决这个问题将是很大的。

EN

回答 3

Stack Overflow用户

发布于 2018-08-30 06:23:51

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

代码语言:javascript
复制
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));
});
票数 0
EN

Stack Overflow用户

发布于 2019-12-05 22:28:29

res对象是一个可写的流,因此您可以直接将ytdl的输出通过管道传递给res对象,如下所示-

代码语言:javascript
复制
    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);
票数 0
EN

Stack Overflow用户

发布于 2021-09-17 19:45:48

您还必须传递标头。试试看:

代码语言:javascript
复制
app.get('/video', (req, res) => {
    var url = "https://www.youtube.com/watch?v=hgvuvdyzYFc";
    res.header("Content-Disposition", 'attachment; filename="Video.mp4');
    ytdl(url, {format: 'mp4'}).pipe(res);
});

如果有人仍然收到错误,只需通过运行以下命令将包更新到最新版本:

代码语言:javascript
复制
npm i ytdl-core@latest
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44605425

复制
相关文章

相似问题

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