CloudStorage 云存储插件
CloudStorage是一个为PbootCMS开发的云存储插件,支持将网站上传的文件自动同步到各大云存储平台,包括阿里云OSS、七牛云存储、腾讯云COS和又拍云存储。
功能特点
- 支持多种云存储平台:阿里云OSS、七牛云存储、腾讯云COS、又拍云存储
- 自动同步上传文件到云存储
- 支持自定义域名
- 简单易用的后台配置界面
- 无缝集成到PbootCMS系统中
- 支持UEditor编辑器上传集成
安装要求
- PbootCMS 3.0.0 或更高版本
- PHP 7.0 或更高版本
- Composer(用于安装依赖)
安装方法
自动安装
- 在PbootCMS后台,进入"系统管理" -> "插件管理"
- 点击"安装新插件",选择CloudStorage插件安装包
- 点击"安装"按钮完成安装
手动安装
- 下载插件安装包并解压
- 将解压后的
CloudStorage
文件夹上传到apps/common/plugin/
目录下 - 在PbootCMS后台,进入"系统管理" -> "插件管理"
- 找到CloudStorage插件,点击"安装"按钮
安装依赖
插件依赖以下PHP SDK,请确保已安装:
composer require aliyuncs/oss-sdk-php qiniu/php-sdk qcloud/cos-sdk-v5 upyun/sdk
加载Composer自动加载文件
为了使用Composer安装的SDK,您需要在PbootCMS的入口文件中加载Composer的自动加载文件。请按照以下步骤操作:
- 编辑PbootCMS根目录下的
core/init.php
文件 - 找到定义版本常量的代码(大概 105行
define('CORE_VERSION', Config::get('core_version'));
) - 在这行代码之前添加以下代码:
// 加载Composer自动加载文件
if (file_exists(ROOT_PATH . '/vendor/autoload.php')) {
require ROOT_PATH . '/vendor/autoload.php';
}
重要提示:必须在定义版本常量之前加载Composer自动加载文件,否则可能会导致错误。
插件文件结构
CloudStorage/
├── adapters/ # 云存储适配器目录
│ ├── AliyunStorage.php # 阿里云OSS适配器
│ ├── QiniuStorage.php # 七牛云存储适配器
│ ├── TencentStorage.php # 腾讯云COS适配器
│ └── UpyunStorage.php # 又拍云存储适配器
├── config/ # 配置目录
│ └── config.json # 默认配置文件
├── sdk/ # SDK目录(可选)
├── CloudStorageBase.php # 云存储基类
├── CloudStorageController.php # 后台控制器
├── CloudStorageHook.php # 钩子类
├── CloudStorageInterface.php # 接口定义
├── CloudStorageManager.php # 管理器类
├── config.json # 当前配置文件
├── functions.php # 全局函数定义
├── init.php # 初始化文件
├── install.php # 安装脚本
├── installed.lock # 安装锁定文件
├── LICENSE # 许可证文件
├── loader.php # 加载器
├── README.md # 说明文档
├── SUMMARY.md # 实现总结
├── ueditor_patch.php # UEditor补丁文件
└── uninstall.php # 卸载脚本
核心文件说明
- CloudStorageInterface.php: 定义了所有云存储适配器必须实现的方法
- CloudStorageBase.php: 实现了通用功能,如错误处理、文件类型获取等
- CloudStorageManager.php: 负责选择和使用适当的存储服务
- CloudStorageHook.php: 提供了拦截上传过程的钩子函数
- loader.php: 负责加载插件的各个组件
- ueditor_patch.php: 为UEditor编辑器提供云存储支持
配置说明
安装完成后,在PbootCMS后台,进入"系统管理" -> "云存储配置",可以进行以下配置:
基本配置
- 启用云存储:选择是否启用云存储功能
- 存储类型:选择要使用的云存储平台(阿里云OSS、七牛云存储、腾讯云COS、又拍云存储)
- 调试模式:选择是否启用调试模式,启用后会记录详细日志
阿里云OSS配置
- AccessKey ID:阿里云账号的AccessKey ID
- AccessKey Secret:阿里云账号的AccessKey Secret
- Endpoint:OSS的访问域名,如
oss-cn-hangzhou.aliyuncs.com
- Bucket:OSS的存储空间名称
- 自定义域名:(可选)自定义的访问域名,如
https://static.example.com
七牛云存储配置
- AccessKey:七牛云账号的AccessKey
- SecretKey:七牛云账号的SecretKey
- Bucket:七牛云的存储空间名称
- 域名:七牛云存储空间的访问域名,如
https://static.example.com
腾讯云COS配置
- SecretId:腾讯云账号的SecretId
- SecretKey:腾讯云账号的SecretKey
- Region:COS的地域,如
ap-guangzhou
- Bucket:COS的存储桶名称
- 自定义域名:(可选)自定义的访问域名,如
https://static.example.com
又拍云存储配置
- 服务名称:又拍云的服务名称
- 操作员:又拍云的操作员账号
- 操作员密码:又拍云的操作员密码
- 域名:又拍云服务的访问域名,如
https://static.example.com
使用方法
配置完成后,当您在PbootCMS中上传文件时,文件会自动同步到您选择的云存储平台。您无需进行额外的操作,插件会自动处理上传过程。
UEditor编辑器集成
本插件已经自动集成了对UEditor编辑器的支持,当您在内容编辑器中上传图片或文件时,会自动上传到您配置的云存储服务中。
UEditor手动配置(如果自动配置不生效)
如果自动配置不起作用,您可以按照以下步骤手动配置UEditor:
- 备份UEditor的上传处理文件:
cp /path/to/your/pbootcms/core/extend/ueditor/php/action_upload.php /path/to/your/pbootcms/core/extend/ueditor/php/action_upload.php.bak
- 编辑UEditor的上传处理文件:
vi /path/to/your/pbootcms/core/extend/ueditor/php/action_upload.php
- 在文件末尾,找到:
return json_encode($up->getFileInfo());
替换为:
$fileInfo = $up->getFileInfo();
// 如果存在云存储处理函数,则调用
if (function_exists('cloud_storage_process_url')) {
$localFile = ROOT_PATH . $fileInfo['url'];
$saveFile = $fileInfo['url'];
$result = cloud_storage_process_url($localFile, $saveFile);
if ($result && !empty($result)) {
$fileInfo['url'] = $result;
}
}
return json_encode($fileInfo);
- 保存文件并退出
避免重复上传问题
如果您发现在使用UEditor上传图片时出现图片被重复上传的问题,可以按照以下步骤解决:
- 编辑
apps/common/plugin/CloudStorage/ueditor_patch.php
文件,确保其中包含以下代码:
function cloud_storage_process_url($localFile, $saveFile) {
// 检查文件是否存在
if (!file_exists($localFile)) {
return false;
}
// 检查云存储插件是否已安装
if (!is_dir(APP_PATH . '/common/plugin/CloudStorage') || !file_exists(APP_PATH . '/common/plugin/CloudStorage/installed.lock')) {
return false;
}
// 获取云存储配置
$config = json_decode(file_get_contents(APP_PATH . '/common/plugin/CloudStorage/config.json'), true);
if (!isset($config['enabled']) || $config['enabled'] != '1') {
return false;
}
// 上传到云存储
$hook = new \app\common\plugin\CloudStorage\CloudStorageHook();
$result = $hook->fileUpload($localFile, $saveFile);
// 如果上传成功,返回云存储URL
if (is_array($result) && isset($result['url'])) {
return $result['url'];
}
return false;
}
- 确保
apps/common/plugin/CloudStorage/loader.php
文件中已经包含了对ueditor_patch.php
的引用:
// 加载UEditor补丁
require_once __DIR__ . '/ueditor_patch.php';
常见问题
文件上传失败
- 检查云存储配置是否正确
- 确认AccessKey/SecretKey等凭证是否有效
- 检查Bucket/服务名称是否存在
- 确认网络连接是否正常
- 查看错误日志(runtime/logs/error.log)
文件无法访问
- 检查自定义域名是否配置正确
- 确认云存储平台的访问权限设置
- 检查CDN缓存是否需要刷新
UEditor上传图片问题
- 检查UEditor补丁是否正确应用
- 确认云存储配置是否正确
- 如果出现图片重复上传问题,检查
ueditor_patch.php
文件配置
调试方法
如果您遇到问题,可以启用调试日志:
- 在后台云存储配置页面,将"调试模式"设置为"启用"
- 查看
runtime/logs/cloud_storage.log
文件中的日志信息
卸载方法
- 在PbootCMS后台,进入"系统管理" -> "插件管理"
- 找到CloudStorage插件,点击"卸载"按钮
更新日志
v1.0.0 (2023-03-11)
- 初始版本发布
- 支持阿里云OSS、七牛云存储、腾讯云COS、又拍云存储
- 提供简单易用的后台配置界面
- 集成UEditor编辑器上传支持
作者信息
- 作者:Leomusk
- 邮箱:Leomusk@icloud.com
- 网站:https://www.gezicode.cn
鸣谢
感谢以下开源项目:
- PbootCMS
- Aliyun OSS SDK for PHP
- Qiniu SDK for PHP
- Tencent Cloud COS SDK for PHP
- Upyun SDK for PHP