- 1.2 环境搭建&安装
- 1.3 项目说明
- 1.4 路由说明
- 1.5 目录结构
- 2.1 模板
- 2.1.1 前台模板
- 2.1.2 后台模板
- 2.1.3 模板标签
- 2.1.3.1 content内容标签
- 2.1.3.2 spf内容标签
- 2.1.3.3 tags内容标签
- 2.1.3.4 comment评论标签
- 2.1.3.5 position推荐位标签
- 2.1.3.6 get数据获取标签
- 2.1.3.7 template模板引入标签
- 2.1.3.8 navigate导航标签
- 2.1.3.9 pre上一篇标签
- 2.1.3.10 next下一篇标签
- 2.1.3.11 blockcache区块缓存标签
- 2.2 行为管理
- 2.2.1 行为规则
- 2.2.2 使用方法
- 2.2.3 测试Behaivor
- 2.3 模块开发
- 2.4.1 权限
- 2.4.2 框架页
- 2.4.3 消息中心
- 2.4.4 登录页安全
- 2.5 请求缓存
- 3.1 Auth
- 3.1.1 通用授权
- 3.1.2 自动登录授权
- 3.1.3 开放平台授权
- 3.2 Wechat
- 3.2.2 v2.x
- 3.3 Area
- 3.3.1 中国区域
- 3.3.2 中国高校
- 3.4 Sms
- 3.4.1 v3
- 3.4.2 v2
- 3.5 Cron
- 3.6 Transport
- 3.6.1 使用
- 3.6.2 最佳实践
- 3.7 Message
- 3.8 Record
- 3.8.1 数据结构
- 3.8.2 使用指南
- 3.9 Wxapp
- 3.10 Log
- 3.11 Alipay
- 3.12 Unionpay
- 3.13 Oss
- 3.14 Chart
- 3.15 Queue
- 3.16 Mirror
- 3.17 Wap
- 3.18 Shop
- 3.19 Search
- 3.20 Addons
- 3.21 Collection
- 3.22 Comment
- 3.23 Domain
- 3.24 Form
- 3.25 Link
- 3.26 Vote
- 3.27 Member
- 4.1 规范和约定
- 4.2 部署指南
- 4.3 常见错误
- 4.4 开发Tips汇总
- 4.4.1 模块
- 4.4.2 自定义后台iconfont
- 4.4.3 自定义成功(失败)页面
- 4.4.4 自定义栏目列表搜索条件
- 4.4.5 根据管理员的权限显示
- 4.5 数据库的存储引擎
- 4.6 行为管理最佳实践
- 4.7 性能优化
- 4.8 ThinkPHP
- 4.8.1 模型
- 4.9.1 发送邮件
- 5.1 系统函数
- 5.2 技术栈
3.13 Oss
云存储模块
是什么
本模块用于上传文件,暂支持「阿里云」与「七牛云」两种云存储。
配置
模块安装后,需要配置一些参数,包括AK(AccessKey),SK(AccessKeySecret),阿里云的 endpoint,以及 七牛云的 domain。
阿里云
阿里云的设置比较繁琐,建议直接阅读官方文档
官方文档:https://help.aliyun.com/document_detail/31932.html?spm=5176.doc31931.6.646.Ie3E9Z
endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同的 Region 的时候,需要不同的域名。通过内网和外网访问同一个 Region 所需要的 Endpoint 也是不同的。进入 OSS 服务,点击指定的存储空间即可获取。
七牛云
七牛云登录管理后台,进入个人中心,点击秘钥管理,即可获取密钥。
domain 是七牛云对外的访问域名,每个存储空间对外的域名都是不一样的,这个不需要配置,但是在后台生成上传配置的时候需要用到,进入指定的存储空间的内容管理中可获取此访问域名。
上传凭证
为了安全,不管是「阿里云」还是「七牛云」,上传都是需要验证权限的。
虽然两者都支持前端直接鉴权生成凭证,但这样做就把生成凭证的密钥暴漏了,所以建议使用后台签名,返回上传凭证的方式。
获取上传的凭证的链接由后台提供,前端直接请求即可。
阿里云 直接上传
前端
//授权链接,此链接由后台提供
var get_token_url = '';
var OssData = null;
//获取凭证
function getToken() {
if (!OssData || OssData.expire < new Date().getTime() / 1000) {
$.ajax({
url: get_token_url,
type: 'get',
dataType: 'json',
async: false,//使用同步请求,保证 token 的可靠性,如不考虑兼容低版本的浏览器,这里考虑直接使用 async/await
success: function (res) {
OssData = res;
}
})
}
}
//上传
function upload() {
getToken();
var formData = new FormData();
// 添加签名信息
formData.append('OSSAccessKeyId', OssData.accessid);
formData.append('policy', OssData.policy);
formData.append('Signature', OssData.signature);
formData.append('key', OssData.dir);
formData.append('success_action_status', '201');
// 添加文件
var file = document.getElementById('file').files[0];
formData.append('file', file, file.name);
$.ajax({
url: OssData.host,
data: formData,
dataType: 'xml',
processData: false,
contentType: false,
type: 'POST',
success: function (data) {
console.log(data)
if ($(data).find('PostResponse')) {
var res = $(data).find('PostResponse');
// 文件地址
var url = res.find('Location').text()
//do string
}
},
error: function (res) {
console.log(res)
}
})
}
后端
//返回 token
function getToken() {
$expire_time = 1800;
AliOssService::init($expire_time);
$bucket = 'ztb-open'; //存储空间名
$dir = 'ztb-open/';//文件前缀,如果以/结尾,则新建目录
$this->ajaxReturn(AliOssService::getToken($bucket, $dir));
}
详细例子可见模块中的 AliyunOssTestController
七牛云 直接上传
前端
//授权链接,此链接由后台提供
var get_token_url = '';
var OssData = null;
//获取凭证
function getToken() {
if (!OssData || OssData.expire < new Date().getTime() / 1000) {
$.ajax({
url: get_token_url,
type: 'get',
dataType: 'json',
async: false,//使用同步请求,保证 token 的可靠性,如不考虑兼容低版本的浏览器,这里考虑直接使用 async/await
success: function (res) {
OssData = res;
}
})
}
}
//上传
function upload() {
getToken();
var formData = new FormData();
// token
formData.append('token', OssData.token);
// file
var file = document.getElementById('file').files[0];
formData.append('file', file, file.name);
$.ajax({
url: 'http://up.qiniu.com',
type: 'POST',
data: formData,
processData: false,
contentType: false,
dataType: 'json',
success: function (res) {
// 文件地址
var url = res.url;
//do string
}
})
}
后端
//返回 token
function getToken() {
$expire_time = 1800;
QiniuService::init($expire_time);
$bucket = 'xxx'; //指定存储空间名
$domain = 'http://xxxx/';//存储空间外网访问链接,需以/结尾
$this->ajaxReturn(QiniuService::getToken($bucket, $domain));
}
详细例子可见模块中的 QiniuTestController
镜像备份
由于历史遗留问题,已存在的项目可能没有接入云存储,而且已经产生了业务数据,如果需要接入云存储,但是不希望进行麻烦的数据迁移,可以通过云存储提供的镜像备份服务来完成数据的无缝迁移。
镜像备份的原理是,当客户端请求的资源在存储云上不存在时,存储云根据服务配置,把请求重定向到配置源,或者主动前往配置源中下载请求资源并存储到存储云中。
当配置源中也找不到指定资源时,云存储返回资源不存在。
使用镜像备份
当启用了镜像备份之后,文件的上传就无须上传到云存储服务了,只需要直接上传到源服务器中,当有请求时,云存储服务会自动抓取资源,并下载到云存储服务中去。
阿里云 镜像回源
阿里云的镜像备份称作「镜像回源」,开启方式为,进入指定的云存储空间,选择基础设置,滚动到底部找到,「镜像回源」,点击设置,进入回源设置,并创建规则即可,阿里云支持最多5条回源规则,规则匹配顺序为顺序匹配。
参考文档: https://help.aliyun.com/document_detail/31865.html
七牛云 镜像存储
七牛云的镜像备份称作「镜像存储」,开启方式为,进入指定的存储空间,选择镜像存储,配置镜像源地址即可,七牛云只支持一个源地址转发规则。
参考文档: https://developer.qiniu.com/kodo/kb/1376/seven-cattle-image-storage-instruction-manuals
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论