结论:日均新增附件在 1GB 以内、只有一台服务器的论坛,直接用本地存储(uploads 目录)就够;只有命中「月附件增量超过 20GB」「出站带宽长期被打满」「要多台服务器共用同一批附件」这三条之一,才值得上对象存储。Clara BBS 后台「系统设置」里已经预留了独立的「云存储」配置分组,切换属于配置层面的事,不用改代码或模板。
本地存储和对象存储有什么区别?
结论:本地存储把文件放在服务器自己的硬盘上,读写走本机、零额外费用;对象存储把文件托管给第三方云服务,通过 HTTP 读写,按存储量 + 下行流量 + 请求数计费。
本地存储的优势是成本为零、不用配密钥、备份就是打包 uploads 目录、PHP 读写同一台机器延迟最低。代价是服务器磁盘和带宽就是天花板,附件下载是最吃带宽的行为,扩容只能升配或加盘。
对象存储的优势是容量近乎无限、附件走外部域名不占服务器带宽、多机部署可以共享同一批文件。代价是多一份账单、要配密钥和 Bucket 权限、数据放在别人那里,迁移时依赖对方导出。
本地存储怎么配才不踩坑?
结论:本地存储的上传故障集中在三处——PHP 上传上限、扩展名白名单、目录可写,按下面顺序查一遍基本能定位。
- 后台「系统设置→上传」里「允许的扩展名」和「附件允许的扩展名」是两个独立字段,前者管图片,后者管 zip、rar、pdf 等附件,漏了哪边哪类文件就传不上。
- PHP 的 upload_max_filesize 和 post_max_size 都要大于你要传的最大文件。宝塔面板默认是 2M,手机直出照片轻松超过,建议两项一起调到 30M 以上,只改一项照样失败。
- uploads 目录必须可写。
三项都正确仍失败时,页面会直接提示具体原因(超过 PHP 上限、白名单不符、目录不可写),不需要翻日志猜。安全侧,系统对上传文件做类型白名单校验,并对图片做二次校验,带脚本的伪装图片过不了。
什么情况下必须换对象存储?
结论:命中任意一条就该换——① 附件月增量超过 20GB(经验阈值);② 服务器出站带宽长期被附件下载占满,比如 5Mbps 小带宽机器;③ 需要多台服务器、多个域名或多个站点共用同一批附件。
第二条比第一条更早出现。硬盘满了一年可能才遇到一次,带宽被一个 500MB 的附件下载拖慢整站却是每周都在发生的事,除非给下载单独走 CDN 或收紧下载权限。第三条是架构问题,本地硬盘的 uploads 目录天然绑死在单机上,没有共享的可能。
如果只是偶尔有大附件下载冲击带宽,优先做的不是换存储,而是把附件下载权限限定为会员或指定用户组。
大文件不占服务器空间的办法:网盘链接模式附件
结论:Clara BBS 的附件支持网盘链接模式——发帖时填链接与提取码,服务器只存一条文本记录,不占用任何存储空间。
这个模式适合几 GB 的软件包、视频课程、素材包这类资源型内容,硬盘和带宽都不受影响。注意两点:一是网盘链接模式的附件同样可以设置价格和下载权限,交易逻辑不变;二是可用性依赖第三方网盘,链接失效要楼主自己回来更新,所以不适合必须长期可用的官方文件,官方文件还是走本地或对象存储。
附件能卖钱吗?
结论:能。发帖时在附件面板给附件单独定价并选择货币,填 0 即为免费,还能限定下载对象为「所有人 / 会员 / 指定用户组」。
附件交易走系统统一记账,与签到奖励、转账、悬赏、礼物共用同一套货币体系,后台「财务运营→货币管理」可自定义多种货币,收入全额归作者。这其实是本地还是云之外更值得算的一笔账:靠资源型附件吸引会员的论坛,附件定价配合会员套餐的「内容权限」权益,带来的收入通常高于省下的那点存储费用。
迁移和备份要注意什么?
结论:本地存储的备份就是打包 uploads 目录加导出数据库;从本地切对象存储时,先配好云存储参数,历史附件保持原地,新附件走云端。
系统升级的方式是覆盖上传新文件后进后台「系统工具→数据库升级」执行一次增量 DDL,幂等可重复执行,附件元数据存在数据库里,升级不会丢记录。另外前台删除帖子是软删除,进入回收站保留 30 天可恢复,超期自动彻底删除,附件随帖子走,误删有 30 天窗口。
收尾一句:先用本地存储把上传三件套配对(白名单、PHP 上限、目录权限),月增量超 20GB 或带宽被打满再上对象存储;超大文件用网盘链接模式兜底;能卖的附件记得定价并走统一记账。