Javascript 将文件从节点发送到客户端进行下载
我正在使用来自浏览器的ajax调用 所以,点击按钮 调用一个函数 对于路由“/文件”Javascript 将文件从节点发送到客户端进行下载,javascript,node.js,ajax,express,Javascript,Node.js,Ajax,Express,我正在使用来自浏览器的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.createWriteStrea
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将文件提供给客户端,然后从服务器端删除文件,以便在客户端下载文件 假设您的url看起来像是在客户端的一个标记,您可以将此url作为路由xyz的某个域来提供文件
我假设在客户端,您有一些定义为
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是保存在服务器中的文件的实际路径,您可以在文件送达后优雅地删除它。在href标记中传递get请求,它会将文件下载到客户端,您正在服务器端写入文件,因此正在创建该文件,您必须在服务器端创建文件,然后通过res.download将文件提供给客户端,然后从服务器端删除文件,以便在客户端下载文件 假设您的url看起来像是在客户端的一个标记,您可以将此url作为路由xyz的某个域来提供文件
我假设在客户端,您有一些定义为
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是保存在服务器中的文件的实际路径,您可以在文件送达后优雅地删除它。我对此不是100%确定,但我假设要下载的文件,特别是大文件存储在带有静态URL的存储桶中。您可以从该存储桶中获取项目,并将链接发送到客户端,从而提示下载。一些例子是AWS S3、Firebase存储、Azure Blob等。我不是100%确定这一点,但我假设要下载的文件,特别是大文件存储在带有静态URL的存储桶中。您可以从该存储桶中获取项目,并将链接发送到客户端,从而提示下载。有些例子是AWS S3、Firebase存储、Azure Blob等,其实不是这样。我一直在考虑这些问题——所以点击按钮,ajax调用被发送到服务器,它应该会得到响应。我想通过这个回复发送文件。嗯,不是真的。我一直在考虑这些问题——所以点击按钮,ajax调用被发送到服务器,它应该会得到响应。我希望通过此响应发送文件。