WP Manifestindependent plugin directory
manifest / media / leosp

LEOSP - 通用WordPress对象存储

WordPress通用对象存储插件。

by 老蒋和他的伙伴们 · github.com/laobuluo/leosp · website

1stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/laobuluo/leosp/archive/refs/heads/main.zip

LEOSP 是一款基于 AWS SDK 的通用 S3 兼容对象存储插件,用于将 WordPress 媒体文件从本地服务器分离到对象存储,降低磁盘占用,提升静态资源分发能力。
适用于 AWS S3、腾讯云 COS、阿里云 OSS、七牛云、Cloudflare R2 及其他 S3 兼容服务。

插件信息

类目 信息
插件更新地址 https://www.laojiang.me/7329.html
团队成员 老蒋、老赵、CNJOEL、木村
支持网站 乐在云主机评价网
建站资源推荐 便宜VPS推荐美国VPS推荐外贸建站主机SSL证书推荐WordPress主机推荐
公众号 老蒋朋友圈

适用场景与需求

  • 站点图片和附件较多,服务器本地磁盘压力大
  • 希望将媒体资源交给对象存储,降低主机带宽和 I/O 负载
  • 希望配合 CDN/自定义域名提升图片访问速度
  • 多台 Web 服务器部署时,需要统一媒体存储位置
  • 需要更灵活地接入多云或 S3 兼容平台

功能介绍

  • 媒体上传时自动同步原图到对象存储
  • 自动重写媒体 URL,前台访问走对象存储或自定义域名
  • 支持上传后异步处理缩略图,减少上传阻塞
  • 支持可选“不在本地保存”模式,节省本地存储空间
  • 支持后台一键测试对象存储连接
  • 支持失败重试机制(缩略图异步任务自动重试)
  • 提供后台错误日志查看、清空日志、手动按附件 ID 重试
  • SecretKey 安全存储(加密保存,不在后台明文回显)

系统要求

  • PHP: 8.1 或更高版本
  • WordPress: 6.0 或更高版本
  • 扩展依赖: OpenSSL(用于密钥加解密)
  • 插件依赖: 安装包内需包含 aws-sdk/vendor/ 目录

安装方式

  1. 将插件目录放置到 wp-content/plugins/leosp/
  2. 确认依赖已完整打包(必须包含 aws-sdk/vendor/
  3. 在 WordPress 后台启用插件
  4. 进入 设置 -> LEOSP 对象存储 完成参数配置

配置说明

设置 -> LEOSP 对象存储 中填写以下参数:

  • 启动关闭静态分离: 是否启用对象存储接管媒体
  • 不在本地保存: 开启后,文件在上传成功后按策略清理本地副本
  • 空间名称 (Bucket): 对象存储桶名称
  • 所属地域 (Region): 例如 ap-shanghai,R2 等可填 auto
  • EndPoint: S3 兼容服务地址(可选,建议带 https://
  • 自定义域名: 资源访问域名(可选,建议使用 CDN 域名)
  • AccessKey / SecretKey: 对象存储凭证
  • 对象路径前缀: 对象统一前缀(可选,如 wp-uploads

使用流程

  1. 在后台完成对象存储配置并保存
  2. 点击“测试连接”确认连接正常
  3. 正常上传媒体文件
  4. 插件自动上传原图并改写 URL
  5. 缩略图在后台异步任务中上传(失败会自动重试)
  6. 可在“最近错误日志”中查看异常并手动触发重试

已实现技术点

  • SDK 接入: 内置 AWS SDK(本地依赖,不走线上动态安装)
  • S3 客户端: \Aws\S3\S3Client 统一封装(上传、删除、连通性测试)
  • WordPress Hooks:
    • wp_handle_upload / wp_handle_sideload(接管上传)
    • wp_generate_attachment_metadata(元数据阶段调度异步任务)
    • wp_get_attachment_url / wp_get_attachment_image_src(URL 重写)
    • delete_attachment(删除附件时同步删远端对象)
  • 异步任务: wp_schedule_single_event + 自定义事件处理缩略图上传
  • 失败恢复: 异步失败自动重试(最大重试次数限制)
  • 后台可观测: 错误日志持久化、后台展示、清空、手动重试
  • 安全增强:
    • SecretKey 加密存储(AES-GCM 方案)
    • 后台不回显明文 SecretKey
    • AJAX 接口使用 nonce + capability 校验
    • 本地文件删除前进行 uploads 路径边界校验
  • 国际化: 支持 Text Domain: leosp 文案翻译机制

注意事项

  • 首次启用建议先在测试环境验证上传、URL、删除链路
  • 开启“不在本地保存”前,建议确认对象存储与 CDN 可稳定访问
  • 若使用第三方对象存储,请确认其 S3 兼容策略与 endpoint 配置
  • 历史媒体不会自动补传,如需迁移历史资源请配合批处理脚本
  • 若站点定时任务(WP-Cron)被禁用,异步缩略图上传会受影响

故障排查

  • 测试连接失败
    • 检查 Bucket、Region、Endpoint、AK/SK 是否正确
    • 检查对象存储权限策略(读写权限)
  • 上传成功但图片打不开
    • 检查自定义域名是否已绑定、HTTPS 证书是否有效
    • 检查对象存储或 CDN 的访问策略
  • 缩略图未同步
    • 查看插件“最近错误日志”
    • 使用日志区的“重试上传”或按附件 ID 手动重试
    • 检查 WP-Cron 是否正常运行

版本与支持

  • 当前版本: 1.0.0
  • 建议在升级前备份数据库和站点文件
  • 如需功能建议与反馈,请访问插件发布页面或开发者网站