Sails.js 下载文件到客户端

Sails.js Download File To Client

在我的 Sails.js(v0.12) 应用程序中,我们在 myApp/downloads/uuid-filename.ext 中生成了一个文件。但是我找不到关于如何将文件下载到客户端的可靠答案。

我的第一个想法是将 uuid 传递给用户并允许他们从 URL 下载它。但是我不确定如何从客户端访问文件,即使我知道完整的文件名。

第二个想法是将内容流式传输给用户,但如果没有 Express.js "res.download()" 功能,这似乎是不可能的。我在 sails.js 文档中找到了 "res.attachment"。然而,这个例子丝毫没有帮助。

如何从我的 API(Sails.js v0.12) 下载文件到我的客户端 (AngularJS)

您实际上可以创建文件流并使用管道发送它

这是一个工作代码

    let filename = req.param("filename");
    let filepath = req.param("filepath");

    let file = require('path').resolve(sails.config.appPath+'//'+filepath)

    if(fs.existsSync(file))
    {
          res.setHeader('Content-disposition', 'attachment; filename=' + filename);

          let filestream = fs.createReadStream(file);
          filestream.pipe(res);

    }else{
        res.json({error : "File not Found"});
    }

这是用 sailsJS (0.12) 和 AngularJS

测试的

我能想到的最简单的方法是在 assets 文件夹内的下载文件夹中生成文件。

这样如果你提供下载 link 作为 http://<url>/downloads/<uuid>.<ext>,如果文件存在它会自动下载,否则会抛出 404.