Firebase getDownloadURL

我正在尝试在Firebase存储分区中获取“长期持续下载链接”文件。 我已经改变了这个权限

service firebase.storage { match /b/project-xxx.appspot.com/o { match /{allPaths=**} { allow read, write; } } } 

而我的javacode看起来像这样:

 private String niceLink (String date){ String link; // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); link = dateRef.getDownloadUrl().toString(); return link; } 

当我运行这个我得到的uri链接,看起来像com.google.android.gms.tasks.zzh@xxx

问题1.我可以从下载链接获取类似于: https : //firebasestorage.googleapis.com/v0/b/project-xxxx.appspot.com/o/20-5-2016.csv?alt=media&token= b5d45a7f-3ab7-4f9b-b661-3a2187adxxxx

当试图获得上面的链接时,我在返回之前更改了最后一行,如下所示:

 private String niceLink (String date){ String link; // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); link = dateRef.getDownloadUrl().getResult().toString(); return link; } 

但是,当这样做,我得到一个403错误,和应用程序崩溃。 CONSOL告诉我这是bc用户没有login/ auth。 “在请求令牌之前请先login”问题2.我该如何解决这个问题?

干杯!

Solutions Collecting From Web of "Firebase getDownloadURL"

当您调用getDownloadUrl()时,该调用是asynchronous的,您必须订阅成功callback以获取结果:

 // Calls the server to securely obtain an unguessable download Url private void getUrlAsync (String date){ // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); dateRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri downloadUrl) { //do something with downloadurl } }); } 

这将返回一个公共的不可猜测的下载url。 如果你刚刚上传了一个文件,这个公共URL将会在上传成功callback(你不需要在上传之后调用另一个asynchronous方法)。

然而,如果你想要的只是引用的string表示,你可以调用.toString()。

 // Returns a Uri of the form gs://bucket/path that can be used // in future calls to getReferenceFromUrl to perform additional // actions private String niceRefLink (String date){ // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); return dateRef.toString(); }