
Files.md配额管理如何优雅地限制单用户存储空间【免费下载链接】files.md Private, quiet space for thinking. Simple app for .md files.项目地址: https://gitcode.com/GitHub_Trending/fi/files.mdfiles.md 是一个私密、安静的思考空间——一个专为.md文件打造的极简笔记应用。当你把它部署成自己的服务器时一个绕不开的问题随之而来如何做配额管理如何优雅地限制单用户存储空间既不浪费磁盘又不打扰用户这篇文章带你拆解 files.md 的配额设计从默认配额配置、无限配额白名单到超限后的友好提示全在一套轻量机制里。为什么笔记应用也需要存储配额files.md 的每个用户都拥有独立隔离的根目录所有产物聊天、文件、日记、习惯都以纯文本形式存在storage/用户ID下见 server/fs/fs.go。这种一用户一目录的结构让配额检查变得异常简单只需要盯住一个目录的总大小。如果不做限制一张随手同步的大图就可能占满磁盘影响其他用户。files.md 的做法是默认给每位用户1MB的存储配额够用、克制、可配置。配额核心机制先算总量再记增量配额逻辑集中在 server/fs/quota.go只有 4 个函数职责清晰首次扫描storageUsed第一次需要计算用量时遍历用户根目录把所有文件大小加起来结果写入带锁的内存缓存storageQuotaCache。之后就不用再全盘扫描了quota.go#L17-L38。增量记账recordQuotaUsage每次写文件记录新大小 - 旧大小删除文件记录负数缓存永远与磁盘保持一致quota.go#L40-L46。写入前检查checkQuota已用量 本次增量 配额时返回ErrQuotaExceeded错误文件不落盘quota.go#L48-L58。白名单判断isUnlimitedQuota解析逗号分隔的用户ID列表命中即视为无限配额。检查发生在FS.Write内部——所有写入路径机器人、Web 同步、媒体同步都会自动过这一关无需各自重复实现server/fs/fs.go。如何设置单用户存储配额配额通过环境变量STORAGE_QUOTA_KB配置单位是 KB默认值1024即 1MBserver/config/config.go#L25-L26STORAGE_QUOTA_KB10240 # 提升到 10MB修改/app/.env后重启服务器即可生效。如果你打算自己部署 files.md完整的容器化与手动部署步骤可以参考官方文档 docs/your-own-server.md如何为指定用户开通无限配额并非所有用户都需要被限制——比如服务器管理员本人或是付费用户。files.md 提供了UNLIMITED_QUOTA_IDS环境变量填写逗号分隔的用户ID列表UNLIMITED_QUOTA_IDS12345,67890用户创建文件系统时server/fs/fs.go 会检查白名单命中则把配额置为0而checkQuota遇到0直接放行——这就是优雅之处无限配额不是绕过检查而是同一个检查函数的自然分支没有额外的特判路径。配额超限时会发生什么被拒收不等于崩溃。files.md 在两条链路上都做了友好处理Telegram 机器人向用户发送一条温和的提示——Storage quota exceeded. Please delete some files.存储配额已满请删除一些文件见 server/bot.goWeb 应用同步文本同步与媒体同步均返回标准 HTTP 状态码413 Request Entity TooLarge与{error:Storage quota exceeded}server/sync/sync.go、server/sync/sync_media.go客户端可据此优雅降级而不是收到一个 500 错误。这套配额设计妙在哪里性能首次遍历一次 内存缓存增量更新避免每次写入都全盘扫描精确按增量差值记账覆盖追加、缩短、删除三种场景用量不会漂移可配置一个环境变量控制全局配额一个白名单豁免特定用户安全每个用户只能写入自己的目录SafePath防路径穿越配额与隔离在同一层实现。想要深入了解可以直接阅读 server/fs/quota.go 与 server/config/config.go 的源码或者查阅 docs/sync-flow.md 了解同步流程如何与配额机制协同工作。【免费下载链接】files.md Private, quiet space for thinking. Simple app for .md files.项目地址: https://gitcode.com/GitHub_Trending/fi/files.md创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考