首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在我的谷歌云函数代码中创建的图像url在放入我的站点上的<img />标记时返回401?

在我的谷歌云函数代码中创建的图像url在放入我的站点上的<img />标记时返回401?
EN

Stack Overflow用户
提问于 2019-06-10 22:06:13
回答 1查看 301关注 0票数 0

当一个图像上传到Firebase存储时,我使用一个云函数来调整它的大小。然后,我将该图像的URL插入到Firestore DB中。当数据库记录更新时,前端应用程序会看到这一变化,并创建一个将URL设置为“src”的标记。网络调用返回401。

据我所知,我要么需要在谷歌管理面板中的某个地方将域名列入白名单,要么我一开始就得到了错误的URL。

当我在Firebase控制台中查看该文件时,我得到了一个与云函数中收到的域名不同的URL。由于存储域不同,因此我需要设置白名单是有意义的。如果是,它在哪里?

https://firebasestorage.googleapis.com/v0/b/...?alt=media

  • function:https://www.googleapis.com/storage/v1/b/...

  • console

我可以进行字符串替换,如果我进入DB并手动更改域,路径的第一部分,并添加alt=media参数,图像将加载。我希望有人能有一个比这更简单的答案。

我将存储桶设置为允许读取。

代码语言:javascript
复制
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
    }
  }
}

我的云函数遵循这个:https://angularfirebase.com/lessons/image-thumbnail-resizer-cloud-function/。以下是重要的部分:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2019-06-11 05:35:43

您可以尝试此解决方案,该解决方案使用不同于通过将图像上传到存储所触发的标准示例的模式。

你可以看看这个链接。

Firebase Cloud Function to resize image on firestore create

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56528015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档