Firebase "putFile()" 一次用于多个文件 (Kotlin)
Firebase "putFile()" for more than one file at a time (Kotlin)
我正在研究一种将多个文件(一次)传递到 firebase 存储的方法。为此,我使用了 putFile()
方法。此方法适用于 1 个文件,但我很难让它一次适用于多个文件(存储在 ArrayList
中)。以下是我使用的逻辑(我知道这是错误的。非常感谢任何帮助):
- 将我要传递到存储文件夹的文件存储在
ArrayList
中
- 使用
for-loop
,遍历所述 ArrayList
并将项目放在 [i]
--changes
- 在
OnSuccessListener
中 2,downloadUrl
- 初始化一个
ArrayList
来存储 downloadUrl
结果
- 在 3 的
OnSuccessListener
中,仅当当前位置 (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)
}
}
}
}
上面的问题是,当我尝试使用 [=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;
}
}
}
问题中详述的错误原因:
默认的读写规则只允许用户在经过身份验证的情况下从存储中读取。使用上述存储规则更改此设置应该可以解决此问题。
我正在研究一种将多个文件(一次)传递到 firebase 存储的方法。为此,我使用了 putFile()
方法。此方法适用于 1 个文件,但我很难让它一次适用于多个文件(存储在 ArrayList
中)。以下是我使用的逻辑(我知道这是错误的。非常感谢任何帮助):
- 将我要传递到存储文件夹的文件存储在
ArrayList
中
- 使用
for-loop
,遍历所述ArrayList
并将项目放在[i]
--changes - 在
OnSuccessListener
中 2,downloadUrl
- 初始化一个
ArrayList
来存储downloadUrl
结果 - 在 3 的
OnSuccessListener
中,仅当当前位置 (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)
}
}
}
}
上面的问题是,当我尝试使用 [=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;
}
}
}
问题中详述的错误原因: 默认的读写规则只允许用户在经过身份验证的情况下从存储中读取。使用上述存储规则更改此设置应该可以解决此问题。