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存储中是否有一种方法可以生成一个指向任何东西的下载URL,以便稍后将文件上传到该URL?
不,这是不可能的。您不能提前生成存储URL,然后在某个时候上载文件。只有当文件在Firebase服务器上成功上传时,您才能获得下载URL。这是因为来自UploadTask的URL包含一个在服务器上生成的令牌,它是URL的一部分。要获得一个上传文件的整个下载URL,请从下面的帖子中看到我的答案:
TLDR:这是一个关于从及其相应的返回的URL的问题。它询问的主要作用和功能是什么,以及是否需要根据安全规则公开可用的文件。 null null null null
只创建不访问令牌。默认情况下有没有办法做到这一点?
在Android中使用和iOS中使用下载存储文件,是否仍然在暗中使用下载uri方法,即在uri末尾使用不可猜测的标记? 我的要求禁止我们向世界公开这样的URL,所以问题是: null
我可以使用firebase-admin通过nodejs将一个文件上传到我的firebase存储桶,但当我进入firebase UI时,我无法打开该文件。我注意到,通过firebase UI上传的文件将自动生成访问令牌,但对于通过NodeJS上传的文件没有。 我已经尝试了几种方法,比如用DownloadToken设置元数据,并在上传后将文件公开。没有一个起作用。 我如何通过API调用生成访问令牌,而
问题所在 问题很怪异,出乎意料。上传/下载工作完美,但非常慢。 我在一个良好的互联网连接1MBps,但这些文件从来没有以这种速度传输。它大约是100-150KBps,这几乎是我的网络可用速度的15%。 请注意,我没有更改上载和下载的超时设置。他们违约了。