![](/img/trans.png)
[英]Upload a file to Firebase Storage and get a downloadUrl. How can I return the result in a Kotlin function?
[英]How to upload image to Firebase Storage and get the DownloadUrl Flutter
我试图让这个应用程序学习在 Firebase 中使用的方法,现在,我正在使用 Cloud Firestore + Storage,但我收到了这个错误:
Exception has occurred.
FirebaseException ([firebase_storage/object-not-found] No object exists at the desired reference.)
我是 firebase 的新人,所以我不知道该怎么办……还有很多更新和更改,其他帖子中的一些回复已被弃用……
Future<void> uploadPic(File foto) async {
final Reference postImageRef = FirebaseStorage.instance.ref().child('Post Images');
var timeKey = DateTime.now();
await postImageRef.child(timeKey.toString() + "jpg").putFile(foto)
.whenComplete(() async { //IM GETTING THE ERROR HERE
await postImageRef.getDownloadURL().then((value) { //IM GETTING THE ERROR HERE
posts.imageUrl = value;
});
});
return posts.imageUrl;
}
这是“保存”按钮的提交
void _submit() async {
if (!formKey.currentState.validate()) return null;
formKey.currentState.save();
uploadPic(foto);
subirPost(posts);
print(posts.datetime);
mostrarToast('Producto guardado');
}
这里的错误是你没有等待下载的图片链接返回给你使用这个方法:
注意:如果要同时上传和写入,必须等待提升完成后再写入。
1- 首先,在 Firebase 中创建一个包含所有相关服务的外部文件,假设它的名称为Api ,并在其中添加此方法:
static Future<dynamic> postFile(
{@required File imageFile, @required String folderPath}) async {
String fileName = DateTime.now().millisecondsSinceEpoch.toString();
Reference reference =
FirebaseStorage.instance.ref().child(folderPath).child(fileName);
TaskSnapshot storageTaskSnapshot =await reference.putFile(imageFile);
print(storageTaskSnapshot.ref.getDownloadURL());
var dowUrl = await storageTaskSnapshot.ref.getDownloadURL();
return dowUrl;
}
2- 上传图片后,此方法会返回Firebase中的图片下载链接,如下所述将其存储在object中:
String imgUrl = await Api.postFile(
imageFile: image,
folderPath: 'image');
if (imgUrl != null) {
posts.imageUrl = imgUrl;
///Type here the command that will write to the firestore
}
查看此工作代码需要 uuid Package: https://pub.dev/packages?q=uuid
File _image;
final pickedFile = await ImagePicker()
.getImage(source: ImageSource.camera, imageQuality: 80);
final String filePath = pickedFile != null ? pickedFile.path : '';
if (filePath.isNotEmpty) {
_image = File(filePath);
if (_image != null) {
if (_image != null) {
final Reference sref = storageReference
.child('chat_multimedia/images/')
.child(uuid.v4());
final UploadTask storageUploadTask = sref.putFile(
_image,
SettableMetadata(
contentType: mime(basename(_image.path)),
),
);
if (storageUploadTask.snapshot.state == TaskState.success) {
final String url = await sref.getDownloadURL();
print('The download URL is ' + url);
} else if (storageUploadTask.snapshot.state == TaskState.running) {
storageUploadTask.snapshotEvents.listen((event) {
percentage = 100 *
(event.bytesTransferred.toDouble() /
event.totalBytes.toDouble());
print('THe percentage ' + percentage.toString());
});
} else {
print('Enter A valid Image');
}
await storageUploadTask.whenComplete(() async {
final String downloadUrl = await sref.getDownloadURL();
});
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.