我正在使用此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);
});
答案 0 :(得分:2)
尝试将内容类型设置为application/octet-stream
,而不是从文件中加载的内容类型。
RFC2046 mime类型规范将application/octet-stream
描述为任意二进制数据。它在所有主流浏览器中都受支持
此外,您的href标记可能会使用a "download" tag。
修改强>
某些浏览器倾向于从文件头中检测mime类型。要防止mime类型检测和强制下载,除了修改内容类型之外,还必须添加Content-Transfer-Encoding: Binary
标头。