You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Firebase Storage规则后触发uploadBytesResumable根引用错误排查

Firebase Storage 规则变更后触发根目录操作错误

测试阶段使用无限制的Firebase Storage规则:

allow read, write: if true;

将规则改为要求用户认证后:

allow read, write: if request.auth != null;

突然触发以下错误:

FirebaseError: Firebase Storage: The operation 'uploadBytesResumable' cannot be performed on a root reference, create a non-root reference using child, such as .child('file.png'). (storage/invalid-root-operation)

修改规则前已成功上传多张图片到存储并在应用中正常查看,且上传代码未做任何改动:

Reference reference = FirebaseStorage.instance.ref();
Future uploadImage() async {
  reference.child('Items/${itemNameController.text}.jpg');
  await reference.putData(
    webImage!,
    SettableMetadata(contentType: 'image/jpeg'),
  );
  downloadUrl = await reference.getDownloadURL();
  update();
}

开发环境:Flutter Web,依赖包版本 firebase_storage: ^11.0.6


更新:完整操作代码

以下是包含FireStorage上传和FireStore数据存储的完整代码,尝试过他人提供的解决方案,但结合两个功能后仍报错:

Database database = Database();
String? id;

Future saveToDb() async {
  var formData = formKey.currentState;
  if (formData!.validate()) {
    await uploadImage().whenComplete(() async {
      await addToFireStore();
      clearData();
      Get.snackbar(
        'Adding done',
        'Adding item done successfully',
        snackPosition: SnackPosition.BOTTOM,
        backgroundColor: AppColors.mainColor,
        borderRadius: Dimensions.radius20,
        duration: const Duration(seconds: 3),
        padding: EdgeInsets.fromLTRB(
          Dimensions.width30,
          Dimensions.height20,
          Dimensions.width40,
          Dimensions.height20,
        ),
      );
      update();
    });
  }
}

Future uploadImage() async {
  await database.reference.child('Items/${itemNameController.text}.jpg').putData(
    webImage!,
    SettableMetadata(contentType: 'image/jpeg'),
  );
  downloadUrl = await database.reference.getDownloadURL();
  update();
}

Future addToFireStore() async {
  for (var i in database.categoriesModel) {
    if (database.categoryValue == i.name) {
      id = i.id;
    }
  }
  await database.catCollectionRef
      .doc(id)
      .collection('Items')
      .doc(const Uuid().v4())
      .set({
    'id': const Uuid().v4(),
    'Name': itemNameController.text,
    'Decryption': itemDescController.text,
    'Availability': switchValue.toString(),
    'Category': database.categoryValue,
    'Quantity type': quantityValue,
    'Quantity value': itemQuanController.text,
    'Price': itemPriceController.text,
    'Image': downloadUrl,
  });
  update();
}

clearData() {
  webImage?.clear();
  itemNameController.clear();
  itemDescController.clear();
  itemQuanController.clear();
  itemPriceController.clear();
  database.categoryValue = 'Choose one';
  switchValue = false;
  quantityValue = 'Choose One';
  downloadUrl = '';
  update();
}

通过UI按钮调用saveToDb()执行完整流程,仍返回相同的根目录操作错误!


内容的提问来源于stack exchange,提问作者Muhammad Qazmouz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:31:11