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 个文件 - 其中一个没有从任何地方引用。如果我可以做这样的事情,第二次上传将转到我的“更新”案例(而不是此处介绍的“新照片”案例) - 文件将在其中正确切换。
Firebase Storage 中有没有办法生成一个不指向任何内容的下载 URL,以便稍后将文件上传到该 URL?
不,这是不可能的。您无法提前生成存储 URL 并稍后上传文件。仅当文件成功上传到 Firebase 服务器上时,您才能获取下载 URL。这是因为来自 UploadTask 的 URL 包含在服务器上生成的令牌,并且它是 URL 的一部分。要获取上传文件的完整下载网址,请参阅我在以下帖子中的回答:
上传文件的过程是异步的,这意味着任何需要该 URL 的代码都需要位于“onSuccess()”方法内,或者从那里调用。所以不需要两次上传文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)