Firebase Storage 是否有办法生成一个不指向任何内容的下载网址,以便稍后将文件上传到该网址?类似的东西(在 Kotlin 中):
fun generateItemPhotoUrl(id: String) =
storageRef.child("$Id/${generateUniqueName()}.${COMPRESS_FORMAT.name}").downloadUrl
此代码返回失败的任务...
我想要这个,这样我的上传过程就可以如下所示:
// Case: old photo is null but new one is not - upload new photo to a new uri
generateItemPhotoUrl(itemId).continueWithTask { generateTask ->
if (generateTask.isSuccessful) {
val destUrl = generateTask.result.toString()
// Uploading may take time, so first update document to hold a uri, so consecutive
// calls will result in updating instead of uploading a new file
updateItemPhoto(itemId, destUrl).continueWithTask { updateTask ->
if (updateTask.isSuccessful)
uploadFileToDest(destUrl, newImage).continueWithTask { uploadTask ->
if (!uploadTask.isSuccessful) updateItemPhoto(itemId, null)
}
}
}
}
正如代码中所解释的,我需要这样做来防止连续两次更新项目照片的速度太快,以至于第一次无法完成上传。我最终得到了 2 个文件 - 其中一个没有从任何地方引用。如果我可以做这样的事情,第二次上传将转到我的“更新”案例(而不是此处介绍的“新照片”案例) - 文件将在其中正确切换。
最佳答案
Is there a way in Firebase Storage to generate a download URL pointing to nothing, in order to upload a file to that URL later?
不,这是不可能的。您无法提前生成存储 URL 并稍后上传文件。仅当文件成功上传到 Firebase 服务器上时,您才能获取下载 URL。这是因为来自 UploadTask 的 URL 包含在服务器上生成的 token ,并且它是 URL 的一部分。要获取上传文件的完整下载网址,请参阅我在以下帖子中的回答:
上传文件的过程是异步的,这意味着任何需要该 URL 的代码都需要位于“onSuccess()”方法内,或者从那里调用。所以不需要上传两次文件。
关于firebase - 上传文件之前生成 Firebase 存储下载 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65906918/