我正在尝试获取“长期持久下载链接”到我们的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用户没有登录/auth。“请先签到,再索要代金券”
问题2.我该怎么解决这个问题?
发布于 2018-07-18 14:51:20
当你调用getDownloadUrl()
,调用是异步的,你必须订阅成功回调才能获得结果:
// 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。如果你刚刚上传了一个文件,那么这个公共网址将在上传的成功回调中(你上传后不需要调用另一个异步方法)。
但是,如果你想要的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();
}
https://stackoverflow.com/questions/-100005592
复制相似问题