我想让用户能够下载一个youtube视频使用node-ytdl。例如,当客户端发出针对特定路由的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代码。即使在网络中它似乎下载的回应,它并没有使用户下载为文件。我不想存储任何文件在server.It上,如果有人可以帮助我如何解决这个问题将是很大的。
发布于 2018-08-30 06:23:51
好的,创建一个数组,然后在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));
});发布于 2019-12-05 22:28:29
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);发布于 2021-09-17 19:45:48
您还必须传递标头。试试看:
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);
});如果有人仍然收到错误,只需通过运行以下命令将包更新到最新版本:
npm i ytdl-core@latesthttps://stackoverflow.com/questions/44605425
复制相似问题