Javascript 如何在浏览器中触发从Firebase功能下载GCS中的图像?
我正在使用Firebase云功能,以便我的用户可以从GCS下载图像,而不是在浏览器中查看 问题在于,由于某些原因,某些图像仍显示在浏览器中 我有什么遗漏吗Javascript 如何在浏览器中触发从Firebase功能下载GCS中的图像?,javascript,node.js,firebase,google-cloud-storage,google-cloud-functions,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 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
,而不是从文件加载的内容类型
mime类型规范将应用程序/octet流
描述为任意二进制数据。所有主要浏览器都支持它
此外,您的href标记可能会使用
编辑:
有些浏览器倾向于从文件头检测mime类型。为了防止mime类型检测和强制下载,除了修改内容类型外,还必须添加
内容传输编码:Binary
头 尝试将内容类型设置为application/octet stream
,而不是从文件加载的内容类型
mime类型规范将应用程序/octet流
描述为任意二进制数据。所有主要浏览器都支持它
此外,您的href标记可能会使用
编辑:
有些浏览器倾向于从文件头检测mime类型。为了防止mime类型检测和强制下载,除了修改内容类型外,还必须添加
内容传输编码:Binary
头 请注意,如果您这样做,您将支付双倍的出口费用。一次用于云存储,另一次用于云功能。我知道这一点。如果你有更好的解决方案,我洗耳恭听。答案中的下载标签看起来很有希望!不工作,因为它不是同一个域…请注意,如果你这样做,你要支付双倍的出口费用。一次用于云存储,另一次用于云功能。我知道这一点。如果你有更好的解决方案,我洗耳恭听。答案中的下载标签看起来很有希望!不起作用,因为它不是同一个域…我已将内容类型设置为application/octet stream
,但由于某些原因,对于某些文件,它们仍然显示在浏览器中,而不是下载。我将尝试下载
属性。与下载
属性的结果相同。根据文档,它必须是同一个域:让我们尝试添加额外的标题:内容传输编码:Binary
,至少对于某些文件。请更新您的答案。我还有一个问题,我将在一个新问题中发布。还应该注意的是,这只能在小于10MB的文件中完成,因为这是使用云函数的HTTP请求的最大大小。我已经将内容类型设置为application/octet-stream
,但由于某些原因,对于某些文件,它们仍然显示在浏览器中而不是下载。我将尝试下载
属性。与下载
属性的结果相同。根据文档,它必须是同一个域:让我们尝试添加额外的标题:内容传输编码:Binary
,至少对于某些文件。请更新您的答案。我还有一个问题,我将在一个新问题中发布。还应该注意的是,这只能在小于10MB的文件中完成,因为这是使用云函数的HTTP请求的最大大小。