我使用Firebase Resize Images扩展为内容创建120x120的缩略图,保留原始图像。我希望能够将原始的全尺寸downloadUrl
存储在我的内容上,并在我想要显示缩略图时执行downloadUrl.replace('.png', '_120x120.png')
。谁想在每个内容上存储2个不同的图像url ?
所以,我将扩展配置为"使调整大小的图像公开",但是调整大小的图像仍然需要一个令牌,它是一个与原始图像不同的令牌,所以我不能通过向原始downloadUrl
添加大小参数来获得缩略图。如果我这样做,我得到一个403,因为令牌是不同的。
如果调整大小的图像仍然需要一个令牌,我不确定"使调整大小的图像公开"是什么意思。指导吗?这似乎是一个非常常见的用例,所以也许我遗漏了一些东西。
使文件公开允许您跳过使用下载url,下载url使用过期的访问令牌签名。
相反,您可以使用它们的公共URI访问文件,其格式为:https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME
因此,对于其中一个缩略图,使用类似于以下URI的内容:
https://storage.googleapis.com/my-project-id.appspot.com/userImages/NT672kMZu5c1kijkAmsoqRUDivC3/profile_120x120.png
另一个解决方案是修改扩展的源代码以禁用新令牌的生成。这里描述了类似的过程:使用Firebase Image Resize Extension时避免重新生成令牌,但是行号会在12月22日更新
- 进入Firebase/Cloud Functions
- 查找
ext-storage-resize-images-generateResizedImage
函数 - 点击右边的三个圆点,打开详细使用统计 进入GCP控制台后,点击EDIT,然后单击NEXT左下方(容易错过)
- 导航到
/lib/resize-image.js
- 查找以下内容(Dec ' 22中的143-145行):
if (metadata.metadata.firebaseStorageDownloadTokens) {
metadata.metadata.firebaseStorageDownloadTokens = uuidv4_1.uuid();
}
- 注释掉整个if语句,或者只注释内部if语句。这将防止扩展为调整大小的图像生成新的令牌,而是使用与原始图像相同的令牌。
if (metadata.metadata.firebaseStorageDownloadTokens) {
// metadata.metadata.firebaseStorageDownloadTokens = uuidv4_1.uuid();
}
- 保存并重新部署功能。这通常需要几分钟,但很有效。调整大小的图像将具有与原始图像相同的令牌。
注意:如果您在此之后修改了Firebase Console中的Resize Images扩展配置,它将覆盖您的更改,因此您需要再次遵循此过程。