如何在GCS中从Firebase功能触发浏览器中的图像下载?

时间:2018-05-03 17:33:13

标签: javascript node.js firebase google-cloud-storage google-cloud-functions

我正在使用此Firebase云功能,以便我的用户可以从GCS下载图像,而不是在浏览器中查看。

问题是由于某种原因,某些图像仍会显示在浏览器中。

我有什么遗漏吗?

const request = require('request');
const mime = require('mime-types');

exports.downloadFile = functions.https.onRequest((req, res) => {

    const url = req.query.url;
    const filename = url.split('/').pop();
    const mimetype = mime.lookup(filename);

    const headers = {
        'Content-Disposition': 'attachment; filename=' + filename,
        'Content-type': mimetype
    };

    res.set(headers);

    request(url).pipe(res);
});

1 个答案:

答案 0 :(得分:2)

尝试将内容类型设置为application/octet-stream,而不是从文件中加载的内容类型。

RFC2046 mime类型规范将application/octet-stream描述为任意二进制数据。它在所有主流浏览器中都受支持

此外,您的href标记可能会使用a "download" tag

修改 某些浏览器倾向于从文件头中检测mime类型。要防止mime类型检测和强制下载,除了修改内容类型之外,还必须添加Content-Transfer-Encoding: Binary标头。