javascript - 将非公开文件作为回复附件发送(下载非公开文件)

标签 javascript node.js

我有一个 HTML 格式的下载按钮,单击该按钮时,会通过 ajax 发出 POST 请求,发送必须下载的文件的文件名。

在服务器端我做了这样的事情:

function download (req, res) {

    ...
    // path is an absolute path to a file that is not in the public
    // directory. I want to download that file
    res.writeHead(200, {
        "Content-disposition": "attachment;filename=\"" + path + "\"",
        "Content-Type": "text/csv"
    });

    var filestream = fs.createReadStream(path);
    filestream.pipe(res);
};

我可以在响应中看到文件内容,但不会出现保存文件对话框。

问题出在哪?我该如何解决这个问题?

我只使用内置的 Node 模块,所以我不使用express。

最佳答案

您无法强制浏览器显示“保存文件”对话框。

以您的示例为例,在我的 Mac 上,Chrome 和 Safari 都会自动下载文件(在 Chrome 中,这是一个是否显示对话框的设置,我认为默认情况下该对话框是关闭的;我不知道 Safari 是否有类似的设置),而 FireFox 确实给了我一个对话框。

关于javascript - 将非公开文件作为回复附件发送(下载非公开文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404584/

相关文章:

javascript - WebGL readPixels 返回翻转的 y 轴

javascript - Javascript 的路径不起作用

javascript - 如何在 Web 浏览器中以 html 或 javascript 实现文本转语音?

javascript - express-graphql - 匹配父路由的子路由

javascript - 使用 jQuery.ajaxSetup 定义 beforeSend 并更改发送的数据

javascript - 如何解决javascript模数运算符不准确的问题?

javascript - 访问自己的 api 时无法读取未定义的属性

javascript - Node.JS-R,Python 繁重计算识别回调何时返回并存储该结果

javascript - Node 不提供静态目录

node.js - 如何通过Atom在Node.js中有条件地设置属性?