如何从Flutter中的UploadTaskSnapshot获取完整的downloadUrl?

时间:2018-05-18 05:26:56

标签: firebase flutter firebase-storage

我正确接收UploadTaskSnapshot,字段downloadUrl包含Uri的实例,用于解析上传文件的下载链接。

如何将存储和downloadUrl作为字符串?

4 个答案:

答案 0 :(得分:5)

@DomingoMG他们想要的最新版本看起来像:

String location = await ref.getDownloadURL();

请参见https://pub.dartlang.org/packages/firebase_storage#-example-tab-

答案 1 :(得分:4)

<强>旧

<击>

<击>
final uploadTask = imageStore.putFile(imageFile);
final url = (await uploadTask.future).downloadUrl;

<击>

<强>更新

这个答案https://stackoverflow.com/a/52690889/217408现在是准确的答案。

final ref = FirebaseStorage.instance
    .ref()
    .child('path')
    .child('to')
    .child('the')
    .child('image_filejpg');

ref.putFile(imageFile);
// or ref.putData(Uint8List.fromList(imageData));

var url = await ref.getDownloadURL() as String;

var url = Uri.parse(await ref.getDownloadURL() as String);

答案 2 :(得分:4)

我通过以下代码从v1.0.3中获得了downloadUrl

StorageReference storageReference = _storage.ref().child(path);
StorageUploadTask uploadTask = storageReference.putFile(imageFile);

StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;

String downloadUrl = await taskSnapshot.ref.getDownloadURL();

答案 3 :(得分:1)

从我的this answer

最新版本的插件不允许您再使用task.future(),并且在文档中他们说使用lastSnapshot对我不起作用。

因此,我使用了onComplete。这是有效的解决方案:

StorageUploadTask uploadTask = storageRef.putFile(yourFile);
StorageTaskSnapshot storageTaskSnapshot = await uploadTask.onComplete;
String downloadUrl = await storageTaskSnapshot.ref.getDownloadURL();