【发布时间】:2022-01-10 07:28:24
【问题描述】:
我正在研究一种将多个文件(一次)传递到 Firebase 存储的方法。为此,我使用了putFile() 方法。此方法适用于 1 个文件,但我正在努力让它一次适用于多个文件(存储在 ArrayList 中)。以下是我使用的逻辑(我知道这是错误的。非常感谢任何帮助):
- 将我想要传递到存储文件夹的文件存储在
ArrayList中 - 使用
for-loop,遍历上述ArrayList并将项目放在[i]--changes - 在
OnSuccessListener中为 2,downloadUrl - 初始化
ArrayList以存储downloadUrl结果 - 在
OnSuccessListenerfor 3 中,仅当当前位置 (i) 为 ==ArrayList.size-1时,将从 3 下载的 url 添加到更新的ArrayList中。我使用它是为了在每次调用该方法时(即循环运行时)都没有任何重复的实例,但该方法仅在前 4 个(以上)完成时才被调用 - 调用将 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)
}
}
}
}
上面的问题是,当我尝试使用downloadUrl 访问(使用生成的downloadUrl 加载文件)文件(最后一个除外)时,我现在收到以下错误,并且似乎只是可以访问最后一个索引处的项目:
{
"error": {
"code": 403,
"message": "Permission denied."
}
}
任何帮助表示赞赏(:
【问题讨论】:
-
成功生成的下载 URL 应该从不给出 403,因为它提供了对文件的公共访问权限。如果您登录
it.toString()并尝试在浏览器中打开该 URL,您可以访问该文件吗? -
@FrankvanPuffelen 我尝试使用浏览器加载网址,但它给了我同样的错误。不知道是不是和我嵌套的
if语句有关 -
嗯...我不确定。希望其他人看到可能导致这种情况的原因。
-
@FrankvanPuffelen 不用担心,感谢您的关注(:您知道是否还有其他方法可以完成任务?
-
检查您的 Firebase 存储安全规则。您可能拒绝了传入的请求。
标签: java android kotlin firebase-storage