Firebase "putFile()" 一次用于多个文件 (Kotlin)

Firebase "putFile()" for more than one file at a time (Kotlin)

我正在研究一种将多个文件(一次)传递到 firebase 存储的方法。为此,我使用了 putFile() 方法。此方法适用于 1 个文件,但我很难让它一次适用于多个文件(存储在 ArrayList 中)。以下是我使用的逻辑(我知道这是错误的。非常感谢任何帮助):

  1. 将我要传递到存储文件夹的文件存储在 ArrayList
  2. 使用 for-loop,遍历所述 ArrayList 并将项目放在 [i] --changes
  3. OnSuccessListener 中 2,downloadUrl
  4. 初始化一个 ArrayList 来存储 downloadUrl 结果
  5. 在 3 的 OnSuccessListener 中,仅当当前位置 (i) 为 == ArrayList.size-1 时,将从 3 下载的 url 添加到更新的 ArrayList 中.我使用它是为了在每次调用该方法时(即循环运行时)都没有任何重复的实例,但仅当前 4 个(以上)完成时才调用该方法
  6. 调用一种方法,将 5(+ 其他东西)生成的 ArrayList 上传到 rtdb

下面是我写的代码:

    for (i in 0 until arrayList.size){
        storageRef.putFile(arrayList[i])
            .addOnSuccessListener {
                Log.d("TAG", "Successfully uploaded file: ${it.metadata?.path}")

                storageRef.downloadUrl.addOnSuccessListener { it ->
                    it.toString()
                    Log.d("TAG", "File location: $it")
                    
                    updatedArrayList.add(it.toString())

                    if (i == arrayList.size){                   
                        //method that creates an instance of an object and passes data to the rtdb (firebase)
                        createInstanceUploadToFirebase(id, updatedArrayList)
                    }
                }
            }
    }

上面的问题是,当我尝试使用 [=20] 访问(使用生成的 downloadUrl 加载文件)文件(除了最后一个) =] 并且似乎只能访问最后一个索引处的项目:

    {
      "error": {
        "code": 403,
        "message": "Permission denied."
      }
    }

感谢任何帮助(:

问题不在于逻辑,而在于存储的安全规则。我就是这样解决问题的:

将存储安全规则更新为:

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

问题中详述的错误原因: 默认的读写规则只允许用户在经过身份验证的情况下从存储中读取。使用上述存储规则更改此设置应该可以解决此问题。