gpt4 book ai didi

javascript - 将文件从 Node 发送到客户端以供下载

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:49 25 4
gpt4 key购买 nike

我正在使用来自浏览器的 ajax 调用所以,点击按钮一个函数被称为对于路线“/文件”

app.get('/filez',function(req,res){
var id = req.params.id;
console.log('id is : ',id);

var video = ytdl(url, { filter: (format) => format.container === 'mp4' })
.pipe(fs.createWriteStream('video.mp4'));
res.download('video.mp4');

现在,文件正在下载到服务器。但我想做的是发送文件,以便客户端可以从浏览器下载它。我不想将文件下载到服务器。

这是我通过单击按钮从浏览器发出的 ajax 请求。我想获取该文件作为响应,可以将其下载到客户端计算机。

function myAjaxCall(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState ===XMLHttpRequest.DONE && xhr.status ===200){
console.log('response has come',xhr.response);
return xhr.response;
}
};
xhr.open('GET','/filez',true);
xhr.send();
};

解释:嗯,不是真的。我正在沿着这些思路思考更多 - 所以单击按钮时,ajax 调用会发送到服务器,并且应该会收到响应。我希望通过此响应发送文件。那么,我该如何实现这一点呢?

最佳答案

在 href 标签中传递 get 请求,它将下载文件到客户端,您正在服务器端写入文件,因此正在创建文件,您必须在服务器端创建文件,然后通过 res.download 将文件提供给客户端,然后从服务器端删除文件以在 clinet 端下载文件假设你的网址看起来像 http://getsomefile.com/xyz?newfile=video.mp4然后在您的客户端标签中,您可以在某个域上拥有此网址 http://getsomefile.com使用路由 xyz 来提供文件

<a href="http://getsomefile.com/xyz?newfile=video.mp4" download>

我假设在客户端你有一些路由定义为

  app.get('/xyz,function(req,res){
var file = req.query.newfile;

})

然后你可以使用 fs.unlink 通过类似 cron 的方式删除文件,或者使用手动清理器或者执行类似的操作

 app.get('/xyz', function(req, res){
var file = req.query.newfile
res.download(realFilepath, file , function(err) {
if (!err) {
fs.unlink(realFilepath);
}
});
});

realFilepath 是保存在 server 中的文件的实际路径,您可以在文件提供服务后正常删除它。

关于javascript - 将文件从 Node 发送到客户端以供下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com