【今日推荐】:为什么一到面试就懵逼!>>>
- 目录
- 1. 前言
- 2. 下载SDK
- 3. 初始化配置
- 3.1第一步:引入官方的SDK
- 3.2第二步:初始化配置项
- 3.3各种操作的简易封装
- 3.3.1 创建存储空间函数
- 3.3.2上传文件函数
- 4. 针对需求高级调用函数封装
- 4.1 二次封装的图片上传函数
- 4.2测试图片上传函数
- 4.2.1前端,详见index.html
- 4.2.2逻辑层,详见doAction.php
- 4.3返回结果
- 5. 防盗链添加和理解
- 5.1 代码注意事项
- 1)开头引入SDK
- 2)修改析构函数
- 5.2 Referer白名单
- 5.2.1 Referer为空,且没有设置addReferer
- 5.2.2 Referer为空,且设置了addReferer
- 5.2.3 Referer不为空,且设置了addReferer
- 5.2.4 Referer不为空,且没有设置addReferer
- 5.2.5 防盗链配置总结
- 6. 总结
1. 前言
经常听说过七云牛OSS、阿里云OSS等等,但是经过了那么久的搬砖,自己居然还不是很了解如何使用OSS云存储,感觉面子有点过不去啊,刚好公司的项目也用到了阿里云的OSS文件存储,那么让我对照着官方文档一步一步搭建自己的私有云吧!
代码分享:https://github.com/mtdgclub/aliyunOssDemo
2. 下载SDK
具体操作详见官方该文档页:https://help.aliyun.com/document_detail/85580.html
购买事项:
1)这里强烈推荐购买一年40G的OSS对象存储,只需9块钱!!
2)建议OSS选择地区和你的云服务器地区一致,这样内网访问不需要流量花销。
3)购买完成,创建bucket,根据自己需求选择权限,推荐选择公共读
4)有必要的话,建议使用防盗链,该文章也会讲到这方面
3. 初始化配置
下面我们开始初始化配置,如果不熟悉建议去官方文档多看几次,为了方便熟悉,我把OSS封装成项目的常用类,如果你不熟悉,建议你敲一遍代码哈~
3.1第一步:引入官方的SDK
//引入官方的SDK
if (is_file(__DIR__ . '/aliyunoss-sdk/autoload.php')) {
require_once __DIR__ . '/aliyunoss-sdk/autoload.php';
}
3.2第二步:初始化配置项
//初始化配置
if(DEBUG){
// 存储空间名称
$this->bucket = "save-test-fangzhijie";
$this->endpoint='oss-cn-shenzhen.aliyuncs.com';//外网
}else{
// 存储空间名称
$this->bucket = "save-test-fangzhijie";
$this->endpoint='oss-cn-shenzhen-internal.aliyuncs.com';//内网
}
$this->accessKeyId = "LTAI4FtvNnPVgLaoYdgyrA3W";
$this->accessKeySecret = "";
// 文件内容
$this->content = '';
// 上传文件路径,
$this->filePath = '';
$this->ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
3.3各种操作的简易封装
根据官方文档的介绍,我对以下几种入门操作,进行封装。
3.3.1 创建存储空间函数
public function createBucket(){
try {
$this->ossClient->createBucket($this->bucket);
} catch (OssException $e) {
return self::debugLog($e);
}
return true;
}
3.3.2上传文件函数
public function uploadObject($type='string'){
try {
if($type=='string'){//字符串上传
$this->ossClient->putObject($this->bucket, $this->object, $this->content);
}elseif($type=='file'){//文件上传
$info = $this->ossClient->uploadFile($this->bucket, $this->object, $this->filePath);
//存储文件访问的URL
$this->ossUrl = $info['oss-request-url'];
}
} catch (OssException $e) {
return self::debugLog($e);
}
return true;
}
其他的操作可以看官方文档,我也会持续更新其他操作
4. 针对需求高级调用函数封装
在完成基本封装函数下,我们针对不同需求再次封装功能函数,这里我举例封装一个图片上传函数,并做简单测试
4.1 二次封装的图片上传函数
/**
* 二次封装的图片上传函数
* @param object $object 上传的临时文件资源
* @return array 返回数组
*/
public function updateImg($object){
if(is_array($object) and !empty($object['name']) and !empty($object['tmp_name'])){
//得到文件后缀
$ext = pathinfo($object['name']);
$ext = strtolower($ext['extension']);
//定义允许上传的类型
$allow_type = array('jpg','jpeg','gif','png');
//是否允许上传
if(!in_array($ext, $allow_type)){
return array('code'=>0,'msg'=>'格式有误');
}
// 临时文件路径
$this->filePath = $tempFile = $object['tmp_name'];
//移动到的路径
$targetPath = 'upload/'.date('Ymd');
$filename=date("His");
$new_file_name = $filename.'.'.$ext;
$this->object = $targetFile = $targetPath .'/'. $new_file_name;
//$ok = $this->ossClient->uploadFile($this->bucket, $targetFile, $tempFile);
$ok = self::uploadObject('file');
if($ok != true){
$data=$ok;
} else {
$imgUrl = $targetPath.'/'.$new_file_name;
$data = array('code'=>1,'imgUrl'=>$imgUrl,'ossUrl'=>$this->ossUrl);
}
}else{
$data=array('code'=>0,'msg'=>'File is not exist');
}
return $data;
}
4.2测试图片上传函数
4.2.1前端,详见index.html
4.2.2逻辑层,详见doAction.php
require_once 'Aliyunoss.php';
$oss = new Aliyunoss();
$res = $oss->updateImg($_FILES['file']);
//var_dump($res);
?>
File upload succeeded...
File upload fail...
这是上传后用,从OSS获取的图片
4.3返回结果
查看阿里云控制台的OSS文件管理
5. 防盗链添加和理解
5.1 代码注意事项
5.1.1开头引入SDK
use OSS\Model\RefererConfig;
5.1.2修改析构函数
//设置防盗链
$refererConfig = new RefererConfig();
// 设置允许空Referer。
$refererConfig->setAllowEmptyReferer(true);
// 添加Referer白名单。Referer参数支持通配符星号(*)和问号(?)。
$refererConfig->addReferer("www.mtdg.club");
$refererConfig->addReferer("www.mtdgblog.com");
try{
$this->ossClient->putBucketReferer($this->bucket, $refererConfig);
} catch(OssException $e) {
$data=array('code' => 0,'title' =>'防盗链设置失败','msg' =>$e->getMessage());
return $data;
}
5.2 Referer白名单
5.2.1 Referer为空,且没有设置addReferer
如果允许空Referer,且没有设置addReferer,那么允许所有域名访问OSS的URL
5.2.2 Referer为空,且设置了addReferer
如果允许空Referer,且设置了addReferer,如果访问的域名没有设置在addReferer,此时通过不在白名单的域名则不允许访问该OSS的URL,但是可以在空Referer情况下访问
但可以通过直接访问来下载(即Referer为空情况下)
5.2.3 Referer不为空,且设置了addReferer
如果不允许空Referer,且设置了addReferer,如果访问的域名没有设置在addReferer,此时通过不在白名单的域名不允许访问该OSS的URL,且不允许在空Referer情况下访问
此时,直接访问也不允许下载了
5.2.4 Referer不为空,且没有设置addReferer
如果不允许空Referer,且没有设置了addReferer,如果访问的URL没有设置在addReferer,此时通过不在白名单的域名允许访问该OSS的URL,且允许在空Referer情况下访问
5.2.5 防盗链配置总结
总的来说,设置反盗链需要满足一定条件才能生效,具体配置理解如下表所示:
Referer |
addReferer |
不在白名单的域名访问 |
下载文件 |
安全性 |
空 |
没设置 |
成功 |
成功 |
低 |
空 |
设置 |
失败 |
成功 |
中 |
非空 |
设置 |
失败 |
失败 |
高 |
非空 |
没设置 |
成功 |
成功 |
中 |
6.总结
以上就是我对阿里云OSS的基础运用学习,学习的时候,也了解到一些更高级的操作,如:对大文件进行分割上传等,希望自己后续抽时间学习高级操作,加油~