Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将文件从节点发送到客户端进行下载_Javascript_Node.js_Ajax_Express - Fatal编程技术网

Javascript 将文件从节点发送到客户端进行下载

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

我正在使用来自浏览器的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将文件提供给客户端,然后从服务器端删除文件,以便在客户端下载文件 假设您的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调用被发送到服务器,它应该会得到响应。我希望通过此响应发送文件。