WP Manifestindependent plugin directory
manifest / media / leosp

LEOSP - 通用WordPress对象存储

WordPress通用对象存储插件。

★ 1stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/laobuluo/leosp/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

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
  • 建议在升级前备份数据库和站点文件
  • 如需功能建议与反馈,请访问插件发布页面或开发者网站