- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力寻找如何设置每个用户可以上传到我的应用程序存储空间的存储空间限制。
我在网上找到方法 Storage.storageLimitInBytes
方法,但我什至没有在 Firebase 文档中看到这个方法,更不用说如何设置它的说明了。
一般来说,初创公司如何监控用户上传图片的次数,他们是否会在用户文档中有一个字段,例如 amountOfImagesUploaded:
并且每次用户上传图片时我都会增加该计数,这样我可以看到谁以这种方式滥用了存储空间。
或者我是否需要类似的文档来跟踪用户每天上传的内容,并在计数达到 100 或其他内容时对该用户采取措施。
对于我面临的这个问题,我非常感谢你的帮助。
最佳答案
Cloud Storage for Firebase 安全规则中的限制分别适用于每个文件/对象,而不适用于整个操作。您可以限制用户可以通过 Firebase Storage's security rules 上传的内容.例如,this (来自链接文档)是一种限制上传文件大小的方法:
service firebase.storage {
match /b/<your-firebase-storage-bucket>/o {
match /images/{imageId} { // Only allow uploads of any image file that's less than 5MB
allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*');
} } }
但是目前这些规则中没有办法限制用户可以上传的文件数量。需要考虑的一些选项:
如果您对用户上传的文件的名称进行硬编码(这也意味着您将限制他们可以上传的文件数量),并且为每个特定用户的文件创建一个文件夹,你可以确定用户文件夹中所有文件的总和,从而限制以这种方式求和。
例如:如果您固定文件名并限制允许的文件名称编号为 1..5,用户只能在其中拥有五个文件存储:
match /public/{userId}/{imageId} {
allow write: if imageId.matches("[1-5]\.txt");
}
或者,您可以在客户端上将所有文件压缩在一起,并且然后上传生成的存档。在这种情况下,安全规则可以强制执行该文件的最大大小。
当然,您可以包含客户端 JavaScript 代码以进行检查在这两种情况下,合并文件的最大大小。一种恶意用户可以轻松绕过此 JavaScript,但大多数用户不是恶意的,会感谢您通过以下方式节省他们的带宽防止无论如何都会被拒绝的上传。
您还可以使用 HTTPS 云函数作为上传目标,并且然后只有在满足您的要求时才将文件传递到 Cloud Storage要求。或者,您可以使用 Cloud Function在用户上传时触发,并验证文件更改后的那个用户。例如:你必须通过云功能/服务器上传文件并跟踪用户上传的总大小。为此,
一个更简单的替代方法是使用 Cloud Storage Triggers哪个每次上传新文件时都会触发云功能。你可以使用元数据检查对象大小并继续添加它数据库。在这种情况下,您可以存储custom claims 中的用户以字节为单位。
exports.updateTotalUsage = functions.storage.object().onFinalize(async (object) => {
// check total storage currently used
// add size of new object to it
// update custom claim "size" (total storage in bytes)
})
然后你可以编写一个安全规则来检查新的大小之和正在使用的对象和总存储不超过 150 GB:允许写入:如果 request.resource.size + request.auth.token.size < 150 *1024 * 1024
如果您需要每个用户,您也可以查看此线程存储验证。解决方案有点棘手,但可以完成: https://medium.com/@felipepastoree/per-user-storage-limit-validation-with-firebase-19ab3341492d
关于firebase - 如何限制每个用户可以上传到 Firebase 存储的存储量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70969541/
我是一名优秀的程序员,十分优秀!