Firebase/Google云存储如何存储图像
我有一个Firestore,它有一个用户文档。当用户将配置文件图像上传到bucket时,我会在Cloud函数中调整其大小,然后保存较小的缩略图。现在我不确定接收下载URL的最佳实践是什么,有两种可能性:Firebase/Google云存储如何存储图像,firebase,google-cloud-firestore,google-cloud-storage,firebase-storage,Firebase,Google Cloud Firestore,Google Cloud Storage,Firebase Storage,我有一个Firestore,它有一个用户文档。当用户将配置文件图像上传到bucket时,我会在Cloud函数中调整其大小,然后保存较小的缩略图。现在我不确定接收下载URL的最佳实践是什么,有两种可能性: 在云函数中,获取已签名的URL并将其存储在用户文档或 使用.getDownloadUrl()方法在前端获取下载url 这两种解决方案的问题都是 1:URL真的很大,一个页面上有多个用户,这加起来比用户文档的实际其余部分更大 2:就速度而言,我不确定是否最好通过一个用户列表循环获取每个用户的缩略图
.getDownloadUrl()
方法在前端获取下载url不过,这两种方法都是有效的。挑一个最适合你的。在后端生成它可能更容易出错。正如Doug Stevenson在回答中提到的,我还认为您正在尝试优化一些甚至不是性能或存储问题的东西。但是,如果您仍然想优化URL的大小,我有两个解决方案 我们已经知道,图片的URL类似于以下内容:
https://firebasestorage.googleapis.com/v0/b/project-id/o/images_folder%2vvTMvCsCRsckpR3R5Qg2s.jpg?alt=media&token=2277f575-8ff7-2211-8262-a28ef679d703
因此,第一个解决方案是使用类似的服务缩短链接。还有其他例子,但我想你明白了。因此,对于上面的URL,在缩短后,将如下所示:
http://tiny.cc/2r4ucz
第二种解决方案需要在数据库中保存两件事。这不是缩短链接,而是存储更少的数据。如您所见,上面的URL是由“基本URL”组合而成的:
其中包括项目的名称和存储图像的文件夹的名称。它还包含图像的名称,在我的例子中,它是由Firestore生成的id,并且定义为唯一的。最后一部分是令牌id:
2277f575-8ff7-2211-8262-a28ef679d703
因此,第二种解决方案是只在数据库中存储图像和令牌的id,然后重建整个URL客户端。因此,在上面的示例中,您应该存储的唯一内容是:
Firestore-root
|
--- users (collection)
|
--- uid (document)
|
--- id: vvTMvCsCRsckpR3R5Qg2s
|
--- token: 2277f575-8ff7-2211-8262-a28ef679d703
|
--- //Other user details
如果您的用户始终只有一张图片,那么您可以使用来自身份验证过程的uid
来代替该随机id:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
嘿,问题是如果我在服务器上获得下载URL,那么我必须使用云存储SDK,它只能给我一个签名URL,我认为没有令牌,只是一个无限长的URL。在这种情况下,你可以缩短URL,一个API,如我的回答中提到的,对吗?你试过了吗?长度的问题是,如果我在每条消息上聊天并存储头像,图像链接的字节数比内容字段本身的字节数还要多,这有点奇怪。这样,与一个小链接相比,我需要100%以上的带宽,但我认为没有办法创建像firebase storage frotnend那样的URL,使用admin sdk?在使用后端sdk时生成签名URL。
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();