当前位置: 首页 > 知识库问答 >
问题:

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

阮炯
2023-03-14
    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个文件-其中一个没有从任何地方引用。如果我可以做类似的事情,第二次上传将转到我的“更新”情况(而不是这里提供的“新照片”情况)-在那里文件将被正确地切换。

共有1个答案

巩俊远
2023-03-14

在Firebase存储中是否有一种方法可以生成一个指向任何东西的下载URL,以便稍后将文件上传到该URL?

不,这是不可能的。您不能提前生成存储URL,然后在某个时候上载文件。只有当文件在Firebase服务器上成功上传时,您才能获得下载URL。这是因为来自UploadTask的URL包含一个在服务器上生成的令牌,它是URL的一部分。要获得一个上传文件的整个下载URL,请从下面的帖子中看到我的答案:

  • 如何从Firebase存储中获取下载url?
 类似资料: