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

标签 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.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/

相关文章:

javascript - Angular 动态 ng-模型名称

node.js - 无法从 getStaticProps nextjs 中的 mdx 文件导入元数据

node.js - npm install 与 edit package.json 和 npm update

node.js - 如何每周一早上(或任何其他特定时间)在我的express.js 网站上运行脚本?

javascript - 如何在 Ruby on Rails 3.0 中对不同域进行 AJAX 调用

javascript - 使用 AJAX 调用 php 函数一直失败

ajax - 检测 HTTP 请求是否来自浏览器/Flex 异步请求?

javascript - Next.js 读取 Firestore 数据

javascript - Hackerrank 算法挑战问题 - 在 hackerrank 环境(节点)中显示类型错误,但在浏览器控制台上运行良好。怎么了?

javascript - 声明具有相对于其他字段的默认值的主干模型