2

在firebase,存储功能很舒服。但是我有两个问题要使用存储功能。

  1. 如何防止用户无限上传文件?例如)如果我可以写 /{uid}/{timestamp}/{fileName} 路径,用户可以上传,直到存储爆炸。
  2. 如何跟踪遗留文件并删除它们?如果用户上传带有图像文件的聊天消息并删除图像,文件仍然存在于存储中。有什么钩子可以管理这个吗?

谢谢!

4

1 回答 1

1

好问题:

您可以使用Firebase 存储安全规则对上传强制实施任意约束。只要文件在名称或元数据中有一条唯一的识别信息,您就可以将其与用户联系起来并强制执行基于时间的访问(除其他外)。一个简单的例子:

match /files/{userId}/{fileName} {
  // Only allow the authorized user to write to their files
  allow write: if request.auth.uid == userId;

  // Allow reads if the resource was created less than an hour ago
  allow read: if resource.timeCreated < request.time + duration.value(60, "m");
}

您要求的是垃圾收集系统:) 简短的回答是,最好在客户端上执行任何文件删除以及任何数据库对象删除,但众所周知,客户端是不可靠的。您还可以设置一个批处理作业(比如每天),从私有备份中读取数据库数据,检查哪些 blob 不再被引用,然后删除它们。您还可以等待Google Cloud Functions并执行操作(例如在文件上传时写入数据库)以同步此信息。最后,您可以使用对象生命周期管理方法在一段时间后清理存储桶中的对象(删除、归档等)。

于 2016-06-22T14:26:41.117 回答