当一个图像上传到Firebase存储时,我使用一个云函数来调整它的大小。然后,我将该图像的URL插入到Firestore DB中。当数据库记录更新时,前端应用程序会看到这一变化,并创建一个将URL设置为“src”的标记。网络调用返回401。
据我所知,我要么需要在谷歌管理面板中的某个地方将域名列入白名单,要么我一开始就得到了错误的URL。
当我在Firebase控制台中查看该文件时,我得到了一个与云函数中收到的域名不同的URL。由于存储域不同,因此我需要设置白名单是有意义的。如果是,它在哪里?
https://firebasestorage.googleapis.com/v0/b/...?alt=media
https://www.googleapis.com/storage/v1/b/...
:
我可以进行字符串替换,如果我进入DB并手动更改域,路径的第一部分,并添加alt=media
参数,图像将加载。我希望有人能有一个比这更简单的答案。
我将存储桶设置为允许读取。
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
}
}
}
我的云函数遵循这个:https://angularfirebase.com/lessons/image-thumbnail-resizer-cloud-function/。以下是重要的部分:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp();
export const imageResize = functions.storage
.object()
.onFinalize(async object => {
const bucket = admin.storage().bucket(object.bucket)
bucket.upload(imagePath, {
destination: join(bucketDir, imageName)
}).then(async (data) => {
const file = data[0]
const [imageLink] = await file.getSignedUrl({
action: 'read',
expires: '04-03-2100'
})
// also tried this
// const [fileMeta] = await file.getMetadata()
// const imageLink = fileMeta.selfLink
然后我将其写入适当的Firestore DB记录。写入工作正常,URL不工作。
预期从file.getSignedUrl()获得的URL应加载到图像标记中
当加载到图像标记中时,URL实际返回401。
发布于 2019-06-11 05:35:43
您可以尝试此解决方案,该解决方案使用不同于通过将图像上传到存储所触发的标准示例的模式。
你可以看看这个链接。
https://stackoverflow.com/questions/56528015
复制相似问题