上传文件之前生成 Firebase 存储下载 url

2023-12-10

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 的一部分。要获取上传文件的完整下载网址,请参阅我在以下帖子中的回答:

  • 如何从 Firebase 存储获取下载网址?

上传文件的过程是异步的,这意味着任何需要该 URL 的代码都需要位于“onSuccess()”方法内,或者从那里调用。所以不需要两次上传文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传文件之前生成 Firebase 存储下载 url 的相关文章

随机推荐