(一)首先在阿里的控制台中OSS里面新建一个bucket
读写权限改为公共读。
以及endpoint需要记录在下面的配置项中。
然后去申请keyid 和secret
准备工作做完了就可以开始下载SDK了
阿里OSS的SDK下载地址
把下载好的文件复制到tp框架的ThinkPHP/Library/Vendor/Alioss文件夹 (Alioss自定义命名)
(二)、在配置项中添加oss配置
/Application/Common/Conf/config.php
1
'ALIOSS_CONFIG' => array(
2
'KEY_ID' => '',
3
'KEY_SECRET' => '',
4
'END_POINT' => '',
5
'BUCKET' => ''
6
),
(三)、在自定义函数中实例化并上传图片
/Application/Common/Common/function.php
1
/**
2
* 实例化阿里云oos
3
* @return object 实例化得到的对象
4
*/
5
function new_oss(){
6
vendor('Alioss.autoload');
7
$config=C('ALIOSS_CONFIG');
8
$oss=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']);
9
return $oss;
10
}
11
12
/**
13
* 上传文件到oss并删除本地文件
14
* @param string $path 文件路径
15
* @return bollear 是否上传
16
*/
17
function oss_upload($path){
18
// 获取bucket名称
19
$bucket=C('ALIOSS_CONFIG.BUCKET');
20
// 先统一去除左侧的.或者/ 再添加./
21
$oss_path=ltrim($path,'./');
22
$path='./'.$oss_path;
23
24
if (file_exists($path)) {
25
// 实例化oss类
26
$oss=new_oss();
27
// 上传到oss
28
$oss->uploadFile($bucket,$oss_path,$path);
29
// 如需上传到oss后 自动删除本地的文件 则删除下面的注释
30
unlink($path);
31
return true;
32
33
}else{
34
return false;
35
}
36
37
}
38
/**
39
* 删除oss上指定文件
40
* @param string $object 文件路径 例如删除 /Public/README.md文件 传Public/README.md 即可
41
*/
42
function oss_delet_object($object){
43
// 实例化oss类
44
$oss=new_oss();
45
// 获取bucket名称
46
$bucket=C('ALIOSS_CONFIG.BUCKET');
47
$test=$oss->deleteObject($bucket,$object);
48
}
49
50
/**
51
* 获取完整网络连接
52
* @param string $path 文件路径
53
* @return string http连接
54
*/
55
function get_url($path){
56
// 如果是空;返回空
57
if (empty($path)) {
58
return '';
59
}
60
// 如果已经有http直接返回
61
if (strpos($path, 'http://')!==false) {
62
return $path;
63
}
64
// 判断是否使用了oss
65
$alioss=C('ALIOSS_CONFIG');
66
if (empty($alioss['KEY_ID'])) {
67
return 'http://'.$_SERVER['HTTP_HOST'].$path;
68
}else{
69
return 'http://'.$alioss['BUCKET'].'.'.$alioss['END_POINT'].$path;
70
}
71
72
}
(四)项目中调用方法
1
public function upFile(){
2
$uplode= new \Think\Upload();//造实例化对象:造一个上传文件的类
3
$uplode->maxSize="31457280";//上传文件的大小
4
$uplode->exts=array('jpg','gif','png','jpeg');//设置图片格式
5
$uplode->autoSub=true;//自动使用子目录保存上传文件 默认为true
6
$uplode->subName=array('date','Ymd');//文件命名方式已时期时间戳命名
7
$uplode->rootPath="./public/";//表示在public文件夹下
8
$uplode->savePath="./Uploads/";//设置附件上传目录:表示在public文件夹下自动建一个Uploads文件夹
9
// 上传文件
10
$info = $uplode->upload();
11
if(!$info){
12
// 上传错误提示错误信息
13
$this->error($uplode->getError());
14
}else{
15
// 上传成功 获取上传文件信息
16
foreach($info as $file){
17
$path = $file['savepath'].$file['savename'];
18
$filename = $file['savename'];
19
}
20
}
21
$path = '/public'.$path; //必须要加上完整的路径,否则在调用上传OSS方法的时候会判断该文件不存在。且'./Public/'最前面的点需要去掉,为了后面获取路径;
22
$res = oss_upload($path);
23
if($res) {
24
$file = get_url($path);
25
}
26
echo $file; //上传到OSS的图片访问地址
27
}