S3云存储示例

S3云存储示例

S3 兼容存储驱动插件,支持AWS S3、MinIO、阿里云OSS、腾讯云COS......

插件 v1.0.9 贰先生 内容 工具 积分兑换 20 金币

S3云存储示例 — xnx_clouds3

本插件为示例插件,供开发者开发第三方云存储插件时参考,不建议用于正式环境,开发者可以参考此插件开发插件后发布免费或付费下载!

Xiuno BBS X 的 S3 兼容存储驱动插件,通过 storage_save / storage_serve / storage_delete 三个专用 Hook 接管附件与头像存储。

使用原生 curl + AWS Signature V4 签名实现,无需 composer 依赖。支持 AWS S3、MinIO、阿里云OSS(S3兼容)、腾讯云COS(S3兼容) 等。

快速开始

  1. 安装插件

  2. 进入插件设置页,填写 S3 配置(端点、Bucket、AccessKey、SecretKey),点「测试连接」验证

  3. 进入「系统设置 - 上传设置」,将存储驱动切换为「S3云存储」

  4. 配置了 CDN 域名时,在插件设置页执行「存量数据同步」(否则历史图片会 404)

  5. 完成

工作原理

Hook

作用

admin_setting_upload_driver_register.php

在设置页注册「S3云存储」选项

storage_save.php

发帖时附件从 tmp 移到 attach 目录后,上传到 S3(配 CDN 时删除本地文件)

storage_serve.php

读取/下载附件时,302 重定向到 S3 预签名 URL

storage_delete.php

删除附件时,同时删除 S3 上的文件

header_start.htm

前台输出层把已上云的 attach/avatar URL 替换为 CDN 域名

my_avatar_post_end.php

头像上传后同步到 S3

model_user_delete_end.php

用户删除时清理云端头像对象

配置说明

字段

说明

endpoint

S3 端点 URL

region

区域

bucket

存储桶名称

access_key

AccessKey

secret_key

SecretKey

cdn_domain

CDN 域名(可选,配置后图片/附件走 CDN,需在服务商侧配置回源到 Bucket)

path_prefix

S3 存储路径前缀

url_style

URL 风格:虚拟主机(OSS/AWS/COS)或路径(MinIO 自建)

适配其他 S3 兼容服务

  • MinIO: endpoint 填 http://IP:9000,region 填 us-east-1,URL 风格选「路径」

  • 阿里云OSS: endpoint 填 https://oss-cn-beijing.aliyuncs.com,region 填 oss-cn-beijing

  • 腾讯云COS: endpoint 填 https://cos.ap-guangzhou.myqcloud.com

从 mycloud_s3 升级

本插件由 mycloud_s3 更名而来,安装时自动迁移旧配置。升级步骤:

  1. 系统设置 - 上传设置:存储驱动先切换回「本地存储」并保存

  2. 卸载旧插件 mycloud_s3(如后台仍显示)

  3. 安装本插件(配置自动迁移)

  4. 系统设置 - 上传设置:存储驱动切换为「S3云存储」并保存

注意事项

  • 预签名 URL 有效期 1 小时,配置 CDN 域名可避免频繁生成

  • 配置 CDN 后本地文件会被删除以节省磁盘,必须先完成存量数据同步

  • 开启"个人资料需审核"的站点,审核通过的头像需重跑一次同步工具

  • 卸载前请先在系统设置中切换回「本地存储」


截图 2
v1.0.9 2026-08-22
作者信息
XiunoX 开发者,独立开发者 & 全栈工程师 DiscuzX 插件/模板、WordPress 主题/插件、XiunoX 框架二次开发、APP 与小程序自研项目。
开发者主页
41
应用
286
安装
2026-08
加入
应用详情
应用分类 插件
版本 v1.0.9
适用版本 1.1
开发者 贰先生
下载量 0
浏览 3
更新时间 2026-08-22
发布时间 2026-08-22
最新回复 1
查看全部
  • xiunox 一级用户组

    该插件结构清晰,核心亮点是使用原生 curl + AWS SigV4 签名,无需依赖 Composer,且通过 storage_save / storage_serve / storage_delete 三个 Hook 完整接管附件生命周期,对开发者很有参考价值。

    作为示例插件,注意几点:

    1. 生产环境建议自行审查签名实现和错误处理。
    2. 预签名 URL 仅 1 小时,若配 CDN 务必先完成存量同步。
    3. 卸载前一定先切回本地存储,避免附件地址失效。

    建议开发者参考其 Hook 设计,扩展其他云存储或私有化存储方案。若有接入或迁移问题,请提供 PHP 版本、S3 服务商及具体报错信息,便于进一步排查。【 AI 自动回复,仅供参考】

    2小时前
查看全部评论 / 发表评论
完整评论功能在讨论帖中,点击前往