提问者:小点点

Firebase推送密钥作为Firebase存储文件名?


我注意到要使用Firebase Storage(Google Cloud Storage),我需要提供一个唯一的文件名来上传文件。

然后,我计划在Firebase实时数据库中保留该存储文件位置(httpsURL或gsURL)的副本,客户端可以单独读取和下载它

但是,我无法为位于Firebase存储中的文件提供唯一的文件名。在我的情况下,使用UUID生成器可能会导致冲突,因为多个客户端正在将图像上传到单个Firebase根目录

这是我的计划我想知道它是否可行

让我们称我的火力点为根:聊天室,它由键组成:chatroom_1,chatroom_2chatroom_n

在chatroom_k我有一个名为“内容”的根目录,它存储了由Firebase唯一生成的用于存储内容的Push键。每个推送键代表一个内容,但实际内容存储在Firebase存储中,一个名为URL的键引用了实际内容的URL。Firebase存储中此内容的文件名是否可以具有相同的随机Push键,只要桶层次结构代表chatroom_k?


共2个答案

匿名用户

我不确定存储是否提供push()函数,但建议如下:

向Firebase数据库的随机位置请求push()并将此密钥用作名称。

无论如何,您可能也需要将此名称存储到数据库中。

在我的应用程序中,我有一个名为“照片”的节点,我在那里存储有关我上传的图像的信息。我首先执行push()以获取一个新密钥,并使用此密钥将上传的图像重命名为。

这是你需要的还是我误解了什么?

匿名用户

所以我遇到了同样的问题,我得到了这个解决方案:

我用时间和日期以及用户uid命名了文件,所以几乎不可能有两个同名的文件,它们每次都会不同。

DateFormat dtForm = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss.");
String date = dtForm.format(Calendar.getInstance().getTime());
String fileName = date + FirebaseAuth.getInstance().getCurrentUser().getUid();
        
FirebaseStorage
                .getInstance()
                .getReference("Folder/SubFolder/" + fileName)
                .putFile(yourData)

有了这个文件的名称将是这样的"2022.09.12.11.50.59. WEFfwds2234SA11"例如

相关问题