我想将Firebase存储中的默认<?php
$name = $_POST['name'];
$age = $_POST['age'];
echo "$name, $age";
?>
HTTP标头覆盖为content-disposition: attachment
,以便从我的存储中提供公共图像,这些图像由浏览器打开(作为content-disposition: inline
链接)以供查看(不下载)。
重要的默认标题如下:
<a href="...">
默认情况下,我认为是content-disposition: attachment
content-type: image/jpeg
强制下载了图片,这就是为什么我尝试在Firebase Admin SDK中上传时覆盖它:
content-disposition: attachment
我清除了存储中的所有图像,并使用此代码上传了新图像,但仍然得到bucket.upload(photoUrl, {
destination,
public: true,
metadata: {
contentDisposition: 'inline',
},
}).then((data) =>
console.log(data[1].mediaLink),
);
。也许是设计使然,也许我的代码是错误的。
图像的网址如下:content-disposition: attachment
。
如果可能的话,将https://www.googleapis.com/download/storage/v1/b/MY_PROJECT/o/IMAGE_PATH?generation=SOME_NUMBER&alt=media
覆盖到content-disposition
的正确方法是什么?
相关问题:From firebase storage download file to iframe
在Chrome devtools控制台中,我得到警告:“资源被解释为文档,但以MIME类型image / jpeg传输”。。我尝试将inline
扩展名附加到上传的图像目标位置,但仍然收到此警告。
答案 0 :(得分:1)
元数据字段称为Content-Disposition
。您是否尝试过以下类似方法?
const meta = {};
meta['Content-Disposition'] = 'inline';
bucket.upload(photoUrl, {
destination,
public: true,
metadata: meta,
});
答案 1 :(得分:0)
我已在GitHub上的nodejs-storage中发布了一个问题,并从@stephenplusplus获得了this response:
我相信您需要为此行为使用签名的URL。的 mediaLink地址似乎是供下载的,而且 需要访问权限(除非您创建了存储桶/文件 公开)。
签名的URL将创建一个唯一的URL供用户访问,与用户无关 在GCS中保护对象的私密性。它还将继承元数据 您设置。要获得在浏览器中打开的已签名URL ...
修改后的代码:
bucket.upload(photoUrl, {
destination,
}).then((data) => {
const file = data[0];
return file.getSignedUrl({
action: 'read',
expires: '12-31-2118',
});
}).then((data) =>
console.log(data[0]),
);
请参见signed URLs in Cloud Storage documentation和File.getSignedUrl
for NodeJS。
const blob = await fetch(mediaLink).then((res) => res.blob());
const blobUrl = URL.createObjectURL(blob);
// To keep adblockers away from your window:
const win = window.open();
win.document.head.innerHTML = `...<img src="${blobUrl}">...`;