[尝试读取图像文件时,我不断从Firebase存储中获取403

问题描述 投票:0回答:1

我很难理解Firebase上传的整个令牌部分。

我只想上传使用化身,将它们保存到数据库中,然后在客户端读取它们。

const storageRef = firebase.storage().ref();
storageRef.child(`images/user-avatars/${user.uid}`).put(imageObj);

然后,在我的云函数中,我像这样获取新的URL:

exports.writeFileToDatabase = functions.storage.object().onFinalize(object => {
  const bucket = defaultStorage.bucket();
  const path = object.name as string;
  const file = bucket.file(path);

  return file
    .getSignedUrl({
      action: "read",
      expires: "03-17-2100"
    })
    .then(results => {
      const url = results[0];
      const silcedPath = path.split("/");

      return db
        .collection("venues")
        .doc(silcedPath[1])
        .set({ images: FieldValue.arrayUnion(url) }, { merge: true });
    });
});

我已在Google API平台中启用IAM,并将Cloud functions service agent添加到App Engine default service account

我感觉以前完全相同的配置已经起作用了,但是现在有时候它甚至不写新的URL,或者我得到403试图读取它。对于我做错的事情,我找不到任何解释或错误。

编辑:忘记添加这段代码,但是FieldValue在文档顶部设置为

const FieldValue = admin.firestore.FieldValue;
firebase google-cloud-platform google-cloud-firestore google-cloud-functions firebase-storage
1个回答
0
投票

您需要执行admin.firestore.FieldValue.arrayUnion(url)而不是FieldValue.arrayUnion(url),请参阅doc

因此下面的代码应该可以解决问题:

exports.writeFileToDatabase = functions.storage.object().onFinalize(object => {
    const bucket = defaultStorage.bucket();
    const path = object.name;
    const file = bucket.file(path);

    return file
        .getSignedUrl({
            action: "read",
            expires: "03-17-2100"
        })
        .then(results => {
            const url = results[0];
            const silcedPath = path.split("/");

            return admin.firestore()
                .collection("venues")
                .doc(silcedPath[1])
                .set({ images: admin.firestore.FieldValue.arrayUnion(url) }, { merge: true });
        });
});
© www.soinside.com 2019 - 2024. All rights reserved.