You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Firebase Storage getDownloadUrl()无token问题

问题解决:Firebase Storage getDownloadUrl()返回无token的URL无法显示

可能原因及解决方案

1. 调整getDownloadUrl()的调用方式

你当前通过task.getResult().getMetadata().getReference()获取存储引用再调用getDownloadUrl(),可能存在引用不一致的问题。建议直接使用最初创建的fileReference来获取下载URL,确保拿到对应文件的有效带token链接:

修改上传代码如下:

private void uploadFile()
{
    if(mImageUri != null)
    {
        StorageReference fileReference = storageRef.child("star_images/" + System.currentTimeMillis() + "." + getFileExtension(mImageUri));
        fileReference.putFile(mImageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // 直接使用原始存储引用获取下载URL
                        fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                db.document("stars/" + starId).update("imagePath", uri.toString());
                            }
                        });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Snackbar.make(findViewById(R.id.starProfileLayout), "上传失败:" + e.getMessage(), Snackbar.LENGTH_SHORT).show();
                    }
                });
    }
    else
    {
        Snackbar.make(findViewById(R.id.starProfileLayout),"未选择文件.", Snackbar.LENGTH_SHORT).show();
    }
}

2. 检查Firebase Storage安全规则

如果你的存储规则设置为仅认证用户可访问(推荐的安全做法),getDownloadUrl()应该自动返回带token的URL。确认规则配置是否正确:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /star_images/{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

若规则设为公开可读(allow read: if true;),URL无需token即可访问,但这种做法存在安全风险,不建议使用。

3. 升级Firebase SDK版本

旧版本Firebase Storage SDK可能存在getDownloadUrl()行为异常,建议使用Firebase BOM统一管理依赖版本,确保所有Firebase组件版本一致且为最新:
在Module级别的build.gradle中添加:

dependencies {
    // 使用Firebase BOM统一管理版本
    implementation platform('com.google.firebase:firebase-bom:32.7.1')
    implementation 'com.google.firebase:firebase-storage'
    implementation 'com.google.firebase:firebase-firestore'
    // 其他Firebase依赖...
}

4. 确认用户认证状态

若存储规则要求用户认证,需确保调用getDownloadUrl()时用户处于已登录状态。上传与获取URL是连续操作,若期间认证状态意外丢失,可能导致返回不带token的URL。

内容的提问来源于stack exchange,提问作者Pokestav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:26