我注意到要使用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?
我不确定存储是否提供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"例如