💾 文件存储引擎
ThinkAdmin 提供统一的文件存储引擎,支持多种存储方案,满足不同场景下的数据存储需求。
🚀 主要功能
- 多存储支持: 支持本地存储、云存储等多种方案
- 统一接口: 提供统一的存储接口,简化开发
- 灵活配置: 支持后台动态配置存储参数
- 文件管理: 完整的文件管理功能
- 性能优化: 支持文件秒传和 CDN 加速
- 安全可靠: 提供安全的文件存储解决方案
📋 存储方案对比
存储方式 | 不占服务器空间 | 上传大文件 | 支持CDN加速 | 是否推荐 |
---|---|---|---|---|
本地服务器存储 | ❌ | ❌ | ❌ | ❌ |
自建 Alist 存储 | ✔️ | 可配 | ❌ | ✔️ |
七牛云空间存储 | ✔️ | ✔️ | ✔️ | ✔️ |
又拍云USS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
阿里云OSS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
腾讯云COS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
🌟 推荐方案
七牛云存储: 配置简单性价比高,首次注册认证赠送 10GB 的免费存储空间。立即注册
⚙️ 存储特性
文件命名策略
- Hash 命名: 默认使用文件 hash 命名,同一文件只存储一份
- 日期命名: 支持日期+随机的方式命名(不支持秒传)
- 秒传支持: 相同文件再次上传时立即成功
- URL 访问: 上传后返回可访问的 URL 链接
配置管理
- 后台配置: 通过系统管理界面配置存储参数
- 参数说明: 提供详细的参数说明和配置指导
- 灵活切换: 支持不同存储方案的灵活切换
性能优化
- 文件秒传: 基于文件 hash 实现秒传功能
- CDN 加速: 支持 CDN 加速提升访问速度
- 缓存机制: 内置缓存机制提升性能
- 压缩优化: 支持文件压缩和优化
安全特性
- 访问控制: 支持文件访问权限控制
- 防盗链: 支持防盗链保护
- 加密存储: 支持文件加密存储
- 备份恢复: 支持文件备份和恢复
存储方式 | 不占服务器空间 | 上传大文件 | 支持CDN加速 | 是否推荐 |
---|---|---|---|---|
本地服务器存储 | ❌️ | ❌ | ❌ | ❌ |
自建 Alist 存储 | ✔️ | 可配 | ❌ | ✔️ |
七牛云空间存储 | ✔️ | ✔️ | ✔️ | ✔️ |
又拍云USS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
阿里云OSS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
腾讯云COS存储 | ✔️ | ✔️ | ✔️ | ✔️ |
这里推荐使用 七牛云存储,主要是配置简单性价比高,首次注册认证赠送 10GB 的免费存储空间。 立即注册
- ThinkAdmin 文件存储默认使用文件 hash 命名,同一个文件只会存储一份;
- 支持文件秒传,当文件已经上传到服务之后,再次上传同一个文件时将立即成功;
- 新版本的 ThinkAdmin 支持以日期+随机的方式命名,注意此方法不支持秒传功能;
- 所有文件上传之后,将统一返回 url 可访问的链接地址,直接存储到内容即可访问;
- 更多文件规则可以在系统后台文件管理处配置参数,不同的存储方式配置不同的参数;
后台配置演示
自动存储引擎
对于文件操作有统一的操作接口,默认自动选择配置的引擎:
关于参数 safe 为存储文件到安全目录 ( 只支持 Local 文件上传 ),不允许直接使用 url 访问,主要用于上传一些私密文件。
use think\admin\Storage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$result = Storage::instance()->upload(); // 上传入口
$result = Storage::instance()->region(); // 存储区域
$result = Storage::instance()->set($filename, $content, $safe); // 上传文件
$result = Storage::instance()->get($filename, $safe); // 读取文件
$result = Storage::instance()->del($filename, $safe); // 删除文件
$result = Storage::instance()->has($filename, $safe); // 判断是否存在
$result = Storage::instance()->url($filename, $safe); // 生成文件链接
$result = Storage::instance()->info($filename, $safe); // 获取文件参数
$result = Storage::instance()->path($filename, $safe); // 计算文件路径
指定存储引擎
// 本地服务器文件操作
use think\admin\storage\LocalStorage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$result = LocalStorage::instance()->upload(); // 上传入口
$result = LocalStorage::instance()->set($filename, $content, $safe); // 上传文件
$result = LocalStorage::instance()->get($filename, $safe); // 读取文件
$result = LocalStorage::instance()->del($filename, $safe); // 删除文件
$result = LocalStorage::instance()->has($filename, $safe); // 判断是否存在
$result = LocalStorage::instance()->url($filename, $safe); // 生成文件链接
$result = LocalStorage::instance()->info($filename, $safe); // 获取文件参数
// 自建 Alist 存储
// 该方式是自行搭建的存储,灵活私有,可使用内网存储
use think\admin\storage\AlistStorage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$result = AlistStorage::instance()->upload(); // 上传入口
$result = AlistStorage::instance()->region(); // 存储区域
$result = AlistStorage::instance()->set($filename, $content); // 上传文件
$result = AlistStorage::instance()->get($filename); // 读取文件
$result = AlistStorage::instance()->del($filename); // 删除文件
$result = AlistStorage::instance()->has($filename); // 判断是否存在
$result = AlistStorage::instance()->url($filename); // 生成文件链接
$result = AlistStorage::instance()->info($filename); // 获取文件参数
// 阿里云 OSS 存储
use think\admin\storage\AliossStorage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$location = '文件远程链接,如:https://v6.thinkadmin.top/favicon.ico';
$result = AliossStorage::instance()->upload(); // 上传入口
$result = AliossStorage::instance()->region(); // 存储区域
$result = AliossStorage::instance()->set($filename, $content); // 上传文件
$result = AliossStorage::instance()->get($filename); // 读取文件
$result = AliossStorage::instance()->del($filename); // 删除文件
$result = AliossStorage::instance()->has($filename); // 判断是否存在
$result = AliossStorage::instance()->url($filename); // 生成文件链接
$result = AliossStorage::instance()->info($filename); // 获取文件参数
// 腾讯云 COS 存储
use think\admin\storage\TxcosStorage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$result = TxcosStorage::instance()->upload(); // 上传入口
$result = TxcosStorage::instance()->region(); // 存储区域
$result = TxcosStorage::instance()->set($filename, $content); // 上传文件
$result = TxcosStorage::instance()->get($filename); // 读取文件
$result = TxcosStorage::instance()->del($filename); // 删除文件
$result = TxcosStorage::instance()->has($filename); // 判断是否存在
$result = TxcosStorage::instance()->url($filename); // 生成文件链接
$result = TxcosStorage::instance()->info($filename); // 获取文件参数
// 七牛云存储
use think\admin\storage\QiniuStorage;
$content = '文件内容 ( 原文件内容,文档或二进制文件 )';
$filename = '文件名称 ( 支持路径,相对 upload 目录 或 云存储根目录 ) ';
$result = QiniuStorage::instance()->upload(); // 上传入口
$result = QiniuStorage::instance()->region(); // 存储区域
$result = QiniuStorage::instance()->set($filename, $content); // 上传文件
$result = QiniuStorage::instance()->get($filename); // 读取文件
$result = QiniuStorage::instance()->del($filename); // 删除文件
$result = QiniuStorage::instance()->has($filename); // 判断是否存在
$result = QiniuStorage::instance()->url($filename); // 生成文件链接
$result = QiniuStorage::instance()->info($filename); // 获取文件参数
后续会跟据使用情况,不定时增加其他存储支持,具体调用参数一致,可根据对应存储驱动调用即可。