将图像上传到存储并更新配置文件

Posted

技术标签:

【中文标题】将图像上传到存储并更新配置文件【英文标题】:Upload image to Storage and update profile 【发布时间】:2019-09-08 15:49:07 【问题描述】:

我有一个非常直接的用例,用户可以上传自己的个人资料图片,并且 URL 将保存在 Firestore 中相应用户的条目中。是否有处理原子性问题的最佳实践?

假设用户上传图片,在此过程中他失去连接或应用程序崩溃,结果将是存储中的文件,但与用户数据中的所述文件没有连接(如果崩溃恰好发生在上传但在 Firestore 写入之前)。

我考虑过使用事务来执行此操作,或者实现一个 Cloud Function 触发器,它监听存储并处理更新用户配置文件。

是否有办法处理 Firestore 规则的上述问题?

在我的具体应用程序中,我需要处理许多大图像,这就是为什么我想在客户端处理尽可能多的东西,但仍然避免在我的数据库中出现巨大的“死”图像。

【问题讨论】:

【参考方案1】:

由于没有跨服务的事务,因此无法保证使用 Firebase 防止孤立图像或悬空引用(取决于哪个写入先完成)。

该解决方案通常是强大的客户端代码(在悬挂引用的情况下)和定期删除孤立图像的脚本的组合。我还建议先测试问题的严重程度,特别是如果您先写图像。

降低中断风险的解决方法可能是使用 Cloud Functions。客户端上传到 Cloud Functions,然后执行两个写入操作。由于 Cloud Functions 在服务器上运行,因此它们被中断的可能性要小得多。

另见:

Firebase handle sudden loss in connection Using transactions in Firebase

【讨论】:

以上是关于将图像上传到存储并更新配置文件的主要内容,如果未能解决你的问题,请参考以下文章

我们可以将 multer 配置为不在本地存储文件并且仅用于使用 req.files.image.path 吗?

如何正确设置 CORS 以将带有 presignedUrl 的文件上传到 Firebase 存储?

如何在用户配置文件视图控制器上显示从火存储到 UIImageView 的图像?

用 mysql 管理图像配置文件?

将多个图像上传到 Firebase

如何将从firebase存储上传的图像保存到firestore数据库中的currentUser