Firebase存储:发生未知错误,请检查服务器响应的错误负载

axkjgtzd  于 2023-10-22  发布在  其他
关注(0)|答案(6)|浏览(174)

我正在尝试创建一个Vue Composable,将文件上传到Firebase Storage。
为此,我使用模块化Firebase 9版本。
但是我当前的代码没有上传任何东西,而是返回了这个错误:FirebaseError: Firebase Storage: An unknown error occurred, please check the error payload for server response. (storage/unknown)
由于这个错误已经来自我的console.log("ERROR", err);,我不知道在哪里寻找解决方案。
我的代码是使用TypeScript实现的,以防万一。

import { projectStorage } from "@/firebase/config";
import { ref, watchEffect } from "vue";
import {
  ref as storageRef,
  uploadBytesResumable,
  UploadTaskSnapshot,
  UploadTask,
  getDownloadURL,
  StorageError,
} from "firebase/storage";

const useStorage: any = (file: File) => {
  const error = ref<StorageError | null>(null);
  const url = ref<string | null>(null);
  const progress = ref<number | null>(null);
  watchEffect(() => {
    // references
    const storageReference = storageRef(projectStorage, "images/" + file.name);
    // upload file
    const uploadTask: UploadTask = uploadBytesResumable(storageReference, file);
    // update progess bar as file uploads
    uploadTask.on(
      "state_changed",
      (snapshot: UploadTaskSnapshot) => {
        console.log("SNAPSHOT", snapshot);
      },
      (err) => {
        error.value = err;
        console.log("ERROR", err);
      },
      async () => {
        // get download URL & make firestore doc
        const downloadUrl = await getDownloadURL(storageReference);
        url.value = downloadUrl;
        console.log("DOWNLOADURL", downloadUrl);
      }
    );
  });
  return { progress, url, error };
};
export default useStorage;
5lhxktic

5lhxktic1#

首先转到存储,规则选项卡并更改允许读,写:如果为假,则为真;如下图所示。

rules_version = '2';
service firebase.storage {
    match /b/{bucket}/o {
        match /{allPaths=**} {
            allow read, write: if true;
    }
  }
}
7hiiyaii

7hiiyaii2#

控制台错误是不够的。它没有提供给予足够的信息。
查看控制台错误时,您需要单击控制台中显示的另一个红色POST 400错误。这将带您到网络选项卡。从那里向下滚动并单击令人不快的红色错误。最后,这个 * 应该 * 会显示一个更有用的错误消息,内容如下:
拒绝许可。请通过访问Firebase控制台中的存储选项卡为您的存储桶启用Firebase存储,并确保您有足够的权限来正确调配资源。
这可能会让你认为这是你的Firebase存储规则的错。在继续之前,您应该仔细检查这些规则,但更可能的问题是您在Google Cloud Console中缺少一个深奥的[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)权限。
要解决这个问题,请执行以下步骤:
1.转到https://console.cloud.google.com
1.在顶部的蓝色栏中选择您的项目(您可能需要切换到“全部”选项卡才能看到您的Firebase项目)
1.向下滚动左侧菜单并选择“云存储”
1.选择您的所有存储桶,然后单击右上角的“许可”
1.点击“添加委托人”
1.将“email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)“添加到”New Principle“框中,并给予“Storage Admin”角色,然后保存
这应该能修好!

k4ymrczo

k4ymrczo3#

转到你的firebase项目控制台,转到存储,然后转到规则,复制并粘贴以下内容:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
    match /users/{userId}/{allPaths=**} {
      allow read: if true;
      allow write: if request.auth.uid == userId;
    }
  }
}
wz8daaqr

wz8daaqr4#

错误代码400显示在调试控制台中,并带有一条消息,提示您必须更新rules_version = '2'。这样做可以解决问题。

jgwigjjp

jgwigjjp5#

如果您只想允许登录的用户写入Firebase存储,则可以使用以下命令:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}
xa9qqrwz

xa9qqrwz6#

重新配置设备内容和设置,然后进行构建。这对我很有效。这是由于模拟器。
Clear Settings Option Location

相关问题