我想让用户能够使用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代码。即使在网络中它似乎下载响应它不会使用户下载为文件。我不想在服务器上存储任何文件。如果有人可以帮助我如何解决问题,那将是很好的。
答案 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);