在上载文件之前生成Firebase存储下载URL [英] Generate Firebase Storage download url before uploading the file

查看:22
本文介绍了在上载文件之前生成Firebase存储下载URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在Firebase Storage中生成一个不指向任何内容的下载url,以便稍后将文件上传到该url?大概是这样(在科特林):

    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个文件-其中一个没有从任何地方引用。如果我可以这样做,则第二次上载将转到我的";update";案例(而不是此处提供的";新照片";案例),其中文件将被正确切换。

推荐答案

Firebase存储中是否可以生成一个不指向任何内容的下载URL,以便稍后将文件上载到该URL?

不,这是不可能的。您不能提前生成存储URL并在以后上载文件。仅当文件成功上载到Firebase服务器时,您才能获得下载URL。这是因为来自UploadTask的URL包含在服务器上生成的令牌,并且它是URL的一部分。要获取上传文件的完整下载URL,请参阅以下帖子中的答案:

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

这篇关于在上载文件之前生成Firebase存储下载URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆