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();
Author by
Tree
Updated on June 08, 2022Comments
-
Tree about 2 years
I correctly receive
UploadTaskSnapshot
, and the field downloadUrl contains an instance ofUri
that parses download link of uploaded file.How to get storage and downloadUrl as strings?
-
Tree about 6 yearsHow to get string url out of that URI that downloadUrl returns.
-
Günter Zöchbauer about 6 years
var urlString = url.toString()
orvar urlString = '${url}'
-
Tree about 6 yearsUri 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 about 6 yearsThank you, though
-
Günter Zöchbauer about 6 yearsWhy would you need the storage location? That's what you need to have already before you can upload (
imageStore.path
) -
Tree about 6 yearsbecause 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 about 6 yearsPath relative to what? I don't get what the actual problem is you're trying to solve.
-
Tree about 6 yearswhen 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 over 5 yearsWhen using it, it indicates the following: The getter 'future' isn't defined for the class StorageUploadTask
-
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 over 5 yearsSee new answer below
-
Tayo.dev over 5 yearsWhat is the
ref
please explain better, I'm having issues getting the Download URL. -
ezaspi over 5 yearsStorageReference. Go to link and search getDownloadURL
-
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 almost 5 yearsI 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 over 4 yearshow about getting a list of multi uploaded images?
-
Peter Haddad over 3 yearsThe above way has been deprecated, to get the
url
check this answer: stackoverflow.com/a/64764390/7015400