How to get full downloadUrl from UploadTaskSnapshot in Flutter?

13,914

Solution 1

old

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

update

This answer https://stackoverflow.com/a/52690889/217408 is now the accurate one.

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;

or

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

Solution 2

I get downloadUrl from v1.0.3 by the following code.

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

StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;

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

Solution 3

@DomingoMG it looks like with the latest release they want:

String location = await ref.getDownloadURL();

See https://pub.dartlang.org/packages/firebase_storage#-example-tab-

Solution 4

Update: Nov 2020

onComplete is now removed from the upload task. So, use:

var reference = FirebaseStorage.instance.ref().child("your_path");
await reference.putFile(fileToUpload);
var url = await reference.getDownloadURL();
Share:
13,914
Tree
Author by

Tree

Updated on June 08, 2022

Comments

  • Tree
    Tree about 2 years

    I correctly receive UploadTaskSnapshot, and the field downloadUrl contains an instance of Uri that parses download link of uploaded file.

    How to get storage and downloadUrl as strings?

  • Tree
    Tree about 6 years
    How to get string url out of that URI that downloadUrl returns.
  • Günter Zöchbauer
    Günter Zöchbauer about 6 years
    var urlString = url.toString() or var urlString = '${url}'
  • Tree
    Tree about 6 years
    Uri parses firebase tokens ect.. and I dont know how to get full url. Also, that only answers half of the question. Is there a way to get storage location?
  • Tree
    Tree about 6 years
    Thank you, though
  • Günter Zöchbauer
    Günter Zöchbauer about 6 years
    Why would you need the storage location? That's what you need to have already before you can upload (imageStore.path)
  • Tree
    Tree about 6 years
    because as a path I send only relative path, so looks like I need to hardcode base url in the app. I did it that way in the end.
  • Günter Zöchbauer
    Günter Zöchbauer about 6 years
    Path relative to what? I don't get what the actual problem is you're trying to solve.
  • Tree
    Tree about 6 years
    when you upload the file you do ` StorageUploadTask putFile = storage.ref().child("region/$fileName").putFile(_regionImage‌​); ` but the actual storage path is "gs://app-db.appspot.com/region/$fileName"; Just thought that I can avoid hardcoding this url. Uri solution worked so thank you
  • DomingoMG
    DomingoMG over 5 years
    When using it, it indicates the following: The getter 'future' isn't defined for the class StorageUploadTask
  • Günter Zöchbauer
    Günter Zöchbauer over 5 years
    @DomingoMG try flutter clean. Otherwise I don't know. Doesn't look like the code I posted can produce such an error.
  • ezaspi
    ezaspi over 5 years
    See new answer below
  • Tayo.dev
    Tayo.dev over 5 years
    What is the ref please explain better, I'm having issues getting the Download URL.
  • ezaspi
    ezaspi over 5 years
    StorageReference. Go to link and search getDownloadURL
  • Mr Special
    Mr Special almost 5 years
    @GünterZöchbauer: is there any ways to get all file in folder by using flutter ? So far, the answer which I know is NO. I need to get all files by file's name which was stored before. Thanks a lot!
  • Günter Zöchbauer
    Günter Zöchbauer almost 5 years
    I don't think so. As far as I know this is also not possible in other languages. This is a Firebase limitation (not sure if this limitation was fixed in Firebase since). When I run into that I used insert and delete triggers with cloud functions to create/delete Firebase database records that point to files to be able to query.
  • griffins
    griffins over 4 years
    how about getting a list of multi uploaded images?
  • Peter Haddad
    Peter Haddad over 3 years
    The above way has been deprecated, to get the url check this answer: stackoverflow.com/a/64764390/7015400