修改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
相关产品推荐
相关产品推荐

