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

Firebase Storage多图上传报-13010 404错误 存储端可见图片端侧报错

问题原因

核心问题是异步场景下的变量覆盖:

  • 你代码中使用的storageReference是方法外部的全局/成员变量,for循环每一轮遍历都会覆盖这个变量的值
  • Firebase上传操作是异步的,上传成功的onSuccess回调不会立刻执行,等回调触发时,storageReference已经被后续循环修改为其他文件的存储路径
  • 此时你用被覆盖的storageReference调用getDownloadUrl(),对应的路径要么还没上传完成,要么和本次上传成功的文件不匹配,就会抛出404不存在的错误。由于上传逻辑本身没有问题,所以你可以在Firebase控制台看到所有文件都上传成功。
解决方法

不要在上传成功回调中使用外部的storageReference变量,直接从taskSnapshot中获取本次上传文件对应的存储引用即可,修改后的核心代码如下:

storageReference.putFile(fileUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        // 直接从taskSnapshot获取当前上传文件的存储引用,避免变量覆盖问题
        taskSnapshot.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(@NonNull Uri uri) {
                Log.d(TAG, "Image Uploaded ");
                Log.d(TAG, "onSuccess: URI Uploaded == "+uri);
            }
        });
    }
})
// 其余进度监听、失败监听逻辑保持不变即可

也可以选择把storageReference定义为for循环内部的局部变量,让每轮循环的引用独立、不会被后续循环覆盖,也可以解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:09