本地存储功能实施计划
当前系统(CRMEB知识付费系统)所有文件上传(图片、视频、文件等)都强制使用阿里云 OSS 存储。如果未配置阿里云 AccessKey、Endpoint、Bucket 等参数,上传功能会直接报错无法使用。
现在需要增加本地存储模式,让用户可以选择将文件存储到服务器本地 public/uploads/ 目录,无需配置阿里云。
实现方案
新增一个系统配置项 upload_type(可选值:local / oss),创建一个与 AliyunOss 接口一致的 LocalStorage 类,然后修改所有上传入口根据配置选择对应存储驱动。已有的 UploadService 类提供了本地文件上传基础能力,可以复用。




修改文件清单
| 文件 | 操作 | 说明 |
|---|---|---|
| extend/Api/LocalStorage.php | 新建 | 本地存储驱动类 |
| application/admin/controller/widget/Images.php | 修改 | admin 图片控制器 |
| application/merchant/controller/widget/Images.php | 修改 | merchant 图片控制器 |
| application/wap/controller/AuthApi.php | 修改 | wap 上传接口 |
| application/wap/controller/PublicApi.php | 修改 | 微信媒体上传 |
| application/admin/controller/download/DataDownload.php | 修改 | 后台资料下载 |
| application/merchant/controller/download/DataDownload.php | 修改 | 商户资料下载 |
| public/system/module/widget/OssUpload.js | 修改 | 前端上传组件 |
测试使用
1、配置测试: 不配置任何阿里云参数,将 upload_type 设为 local(本地存储),确认系统不报错
2、图片上传: 在后台通过图片管理器上传图片,验证文件保存到 public/uploads/ 目录,且 URL 正确
3、文件上传: 测试资料下载模块的文件上传(分片上传)
4、前端上传: 验证 OssUpload.js 在 local 模式下正常工作
5、文件删除: 测试删除图片/文件时本地文件也被正确删除
6、切换测试: 将 本地存储功能 切回 阿里云oss,确认原有阿里云上传功能不受影响
需要在数据库中执行的 SQL 语句,用来添加 upload_type 配置项
-- 在系统配置表中添加"上传方式"配置项(添加到阿里云配置分组,config_tab_id=19)
java
INSERT INTO `eb_system_config` (`menu_name`, `type`, `input_type`, `config_tab_id`, `parameter`, `upload_type`, `required`, `width`, `high`, `value`, `info`, `desc`, `sort`, `status`)
VALUES ('upload_type', 'radio', 'input', 19, 'oss=阿里云OSS\nlocal=本地存储', 0, '', 100, 0, '"oss"', '文件上传方式', '选择文件上传存储方式,选择"本地存储"则无需配置阿里云参数', 0, 1);