首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Firebase存储获取URL?

如何从Firebase存储获取URL?
EN

Stack Overflow用户
提问于 2018-07-18 05:25:40
回答 1查看 0关注 0票数 0

我正在尝试获取“长期持久下载链接”到我们的Firebase存储桶中的文件。我已经把这个权限改为

代码语言:txt
复制
service firebase.storage {
  match /b/project-xxx.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

我的javacode看起来如下:

代码语言:txt
复制
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

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

代码语言:txt
复制
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.我该怎么解决这个问题?

EN

Stack Overflow用户

发布于 2018-07-18 14:51:20

当你调用getDownloadUrl(),调用是异步的,你必须订阅成功回调才能获得结果:

代码语言:javascript
复制
// 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()

代码语言:javascript
复制
// 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();
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档