操作'uploadBytesResumeable'无法对根引用执行,请使用child创建非根引用



我使用的Firebase服务没有这样的测试规则:allow read, write: if true;,当我决定制定规则时,这个问题突然发生了!

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

Firebase错误:Firebase存储:无法对根引用执行操作"uploadBytesResumeable",请使用child("file.png")创建非根引用。(存储/无效根操作)

在更改规则之前,我将许多图像上传到存储中,并在应用程序中查看它们,但现在我正在尝试使用我的所有信息,没有任何更改!!

这是我用来上传图像的方法,在更改规则之前或之后,我没有更改任何内容:

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网络。

我使用的是这个包:firebase_storage: ^11.0.6

更新

我将把我的操作的完整代码放在这里,当我试图上传到fireStorage时,问题就出现了,但还有另一个功能可以在fireStore中存储数据。

我已经尝试了Someone键入的解决方案,但当我将功能(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()函数来设置整个操作,但返回相同的问题!!!

如果您正在引用根目录,则调用child()on语句不会更改引用,请尝试:

Reference reference = FirebaseStorage.instance.ref();
Future uploadImage() async {

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

相关内容

最新更新