Flutter中FirebaseStorage调用getDownloadURL()报错:无App Check令牌及对象不存在
问题分析与解决
核心错误原因
你代码里的ref.putFile(image);是异步操作,但未使用await等待上传完成就直接调用getDownloadURL()。此时文件还未完全上传至Firebase Storage,因此触发object-not-found错误,导致后续Firestore写入流程失败。
No App Check token for request属于非致命警告,因你未启用App Check,不影响核心功能,可忽略。
修正后的代码
final ref = FirebaseStorage.instance .ref() .child('user_image') .child('${userCredential.user?.uid}.jpg'); // 等待文件上传完成后再执行后续操作 await ref.putFile(image); final url = await ref.getDownloadURL(); await FirebaseFirestore.instance .collection('users') .doc(userCredential.user!.uid) .set({'username': username, 'email': email, 'image_url': url});
补充说明
putFile()返回UploadTask对象,必须通过await等待任务完成,才能确保文件已成功存储到指定路径。- 若需监控上传进度,可利用
UploadTask的监听功能:final uploadTask = ref.putFile(image); uploadTask.snapshotEvents.listen((taskSnapshot) { final progress = (taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) * 100; print('上传进度:$progress%'); }); await uploadTask;
内容的提问来源于stack exchange,提问作者aabiro
相关产品推荐
相关产品推荐

