javascript - 如何在浏览器中从 Firebase 函数触发 GCS 中图像的下载?

标签 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);
});

最佳答案

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

RFC2046 MIME 类型规范将 application/octet-stream 描述为任意二进制数据。所有主流浏览器均支持

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

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

关于javascript - 如何在浏览器中从 Firebase 函数触发 GCS 中图像的下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160868/

相关文章:

android - Firebase Firestore : Cannot call useEmulator() after instance has already been initialized

ios - 在使用 FIRDatabase 之前必须调用 FIRApp.configure()。错误,即使我已经调用了它

javascript - Windows 8 上的 Firefox 报告为触摸设备

javascript - 分组堆叠 Highcharts 图中整个堆栈的工具提示

javascript - 如何获取 Vue.js 中计算数组的长度

node.js - 如何在nodejs响应中发送 header

javascript - 如何将 d3-jetpack 与 d3v4 一起使用?

firebase - 发布应用程序 com.google.android.gms.common.api.b 10 后 Flutter Google Sign 和 Phone Auth 错误

javascript - 如何获取其他页面内 HTML 页面中字段的值

node.js - 我如何使用nodejs在一段时间后动态更新数据?