开发者问题收集

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

2021-10-28
2125

我正在尝试使用 Flutter Web 将图像上传到 Firebase Storage。我已在线上学习了许多有关如何操作的教程,但最终还是遇到了相同的错误。

这是我的上传代码

  pickImageFromGallery() async {
    imageFile = await ImagePickerWeb.getImageInfo;
    setState(() {
      _image = imageFile!.fileName!;
    });
  }

  Future<void> uploadFile(
      MediaInfo mediaInfo, String ref, String fileName) async {
    try {
      String mimeType = mime(path.basename(mediaInfo.fileName!))!;

      final String extension = extensionFromMime(mimeType)!;

      var metadata = fb.UploadMetadata(
        contentType: mimeType,
      );

      fb.StorageReference storageReference =
          fb.storage().ref('images').child('$fileName.$extension');

      fb.UploadTaskSnapshot uploadTaskSnapshot =
          await storageReference.put(mediaInfo.data, metadata).future;

      Uri imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
      setState(() {
        _imageURL = imageUri.toString();
      });
    } catch (e) {
      setState(() {
        _imageURL = e.toString();
      });
    }
  }

这是我的公共访问存储规则

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

这是我收到的错误

FirebaseError: Firebase Storage: An unknown error occurred, please check the error payload for server response.
{
  "error": {
    "code": 404,
    "message": "Not Found."
  }
} (storage/unknown)

我已尝试了网上所有看似可行的解决方案,但该问题没有确切的解决方案。请帮我找出问题所在。

我正在使用 Flutter Web 和以下软件包: firebase、 path、 image_picker_web、 mime_type

编辑:工作代码

问题似乎出在 StorageReference 上。修改如下后即可生效:

fb.StorageReference storageReference = fb.storage().refFromURL('gs://storageBucket/').child('$fileName.$extension');

将“storageBucket”替换为 Firebase Storage 中显示的 storageBucket 名称

3个回答

我也遇到了这种情况,因为我没有更新 firebase 存储规则以允许我写入数据库

Charles Arko-Clayman
2022-05-20

我遇到了同样的错误。 当路径无法到达存储桶时会发生这种情况,我发现这意味着“404 未找到”。检查 firebaseConfig 中 storageBucket 中的存储桶名称。就我而言,我使用的是 Dotenv,并在双引号后留了一个空格。 Dotenv 将其转换为“”双引号。

您可以在 Firebase 存储控制台中检查存储桶名称。您不需要开头的“gs://”或结尾的“/”。只需检查名称即可。如果您使用的是 Dotenv,请注意空格。

Warao Shikyo
2021-11-12

我出现此错误是因为当我将 REACT_APP_FIREBASE_STORAGE_BUCKET 变量从本地环境中使用的 .env 文件复制到我的托管服务 Netlify 时,我添加了引号(即,我输入了 'my.secret.url' 而不是 my.secret.url

Toivo Säwén
2022-05-06