问题
Is there a simple way to get the download URL of a file uploaded to Firebase?
(I've tried playing around with the snapshot returned by my upload function and couldn't find anything...)
fileref.put(file).then(function(snapshot){
self.addEntry(snapshot);
/// return snapshot.url???
});
回答1:
To get the Url created by default from the snapshot you can use downloadURL
, meaning snapshot.downloadURL
.
Remember to always keep tracking the progress of the upload by using .on('state_changed')
, Documentation here.
回答2:
The documentation referenced by Yamil - Firebase javascript SDK file upload - recommends using the snapshot's ref
property to invoke the getDownloadURL
method, which returns a promise containing the download link:
Using your code as a starting point:
fileref.put(file)
.then(snapshot => {
return snapshot.ref.getDownloadURL(); // Will return a promise with the download link
})
.then(downloadURL => {
console.log(`Successfully uploaded file and got download link - ${downloadURL}`);
return downloadURL;
})
.catch(error => {
// Use to signal error if something goes wrong.
console.log(`Failed to upload file and get link - ${error}`);
});
I know it seems like unnecessary effort and that you should be able to get the link via a property of the snapshot, but this is what the Firebase team recommends - they probably have a good reason for doing it this way.
回答3:
When using user based security rules as given in official docs
// Only an individual user can write to "their" images
match /{userId}/{imageId} {
allow write: if request.auth.uid == userId;
}
url retrieved by snapshot.downloadURL is exposing userId. How to overcome this security risk.
来源:https://stackoverflow.com/questions/43911080/return-the-download-url-of-a-file-uploaded-to-firebase