0

Reading the documentation, I found a section talking about how to upload files and get its download link. The code to get download link is:

Kotlin

val ref = storageRef.child("images/mountains.jpg") uploadTask = ref.putFile(file) val urlTask = uploadTask.continueWithTask { task -> if (!task.isSuccessful) { task.exception?.let { throw it } } ref.downloadUrl }.addOnCompleteListener { task -> if (task.isSuccessful) { val downloadUri = task.result } else { // Handle failures // ... } } 

Java

final StorageReference ref = storageRef.child("images/mountains.jpg"); uploadTask = ref.putFile(file); Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() { @Override public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception { if (!task.isSuccessful()) { throw task.getException(); } // Continue with the task to get the download URL return ref.getDownloadUrl(); } }).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { if (task.isSuccessful()) { Uri downloadUri = task.getResult(); } else { // Handle failures // ... } } }); 

But what is the line I get the download URL? Is it the "return ref.getDownloadUrl();"/"ref.downloadUrl"? Or the "Uri downloadUri = task.getResult();"/"val downloadUri = task.result"?

1 Answer 1

1

In both cases, the variable called downloadUri is the final download URL. You can convert it to a plain old string, if you want, with downloadUri.toString().

It is not the return value of ref.getDownloadUrl(). That is a very common mistake. getDownloadUrl() is asynchronous and doesn't return the URL immediately. That's why you need the callback.

See also: How to get URL from Firebase Storage getDownloadURL

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.