该文章来自 https://www.erdangjiade.com/js/1021.html
阿里云的对象存储oss,类似七牛存储。 前几天有客户需要把图片放在阿里云的oss里面,百度过一些资料,好像都是oss比较旧的版本1.几的,现在上传一个比较新的oss版本v2.0.5,并集成到thinkPHP里面
可以在阿里云网站下载oss的demo源代码PHP版:v2.0.5
将oss扩展放入ThinkPHP/Vendor 里
第二步:公共配置文件里面
//oss配置
“OSS_ACCESS_ID” => ”,
“OSS_ACCESS_KEY”=> ”,
“OSS_ENDPOINT” => ”,// Endpoint以杭州为例,其它Region请按实际情况填写。”http://oss-cn-hangzhou.aliyuncs.com“;
“OSS_TEST_BUCKET” => ”, //OSS文件存放位置,
“OSS_WEB_SITE” =>”, //这个OSS_WEB_SITE是oss的bucket创建后的外网访问地址,如需二级域名,可以指向二级域名,具体可以参考阿里云控制台里面的oss
//oss文件上传配置
'oss_maxSize'=>1048576, //1M
'oss_exts' =>array(// 设置附件上传类型
'image/jpg',
'image/gif',
'image/png',
'image/jpeg',
'application/octet-stream',//阿里云好像都是通过二进制上传,似乎上面4个后缀设置起到什么用?
),
第三步:公共function里面
// 返回json
function backJson(
code,
c
o
d
e
,
info){
arr[′status′]=
a
r
r
[
′
s
t
a
t
u
s
′
]
=
code;
arr[′info′]=
a
r
r
[
′
i
n
f
o
′
]
=
info;
print_r(json_encode($arr));
exit;
}
//oss上传
/*
*
fFiles:文件域∗
f
F
i
l
e
s
:
文
件
域
∗
n:上传的路径目录
*
ossClient∗
o
s
s
C
l
i
e
n
t
∗
bucketName
*
web:oss访问地址∗
w
e
b
:
o
s
s
访
问
地
址
∗
isThumb:是否缩略图
*/
function ossUpPic(
fFiles,
f
F
i
l
e
s
,
n,
ossClient,
o
s
s
C
l
i
e
n
t
,
bucketName,
web,
w
e
b
,
isThumb=0){
fType=
f
T
y
p
e
=
fFiles[‘type’];
back=array(‘code′=>0,‘msg′=>”,);if(!inarray(
b
a
c
k
=
a
r
r
a
y
(
‘
c
o
d
e
′
=>
0
,
‘
m
s
g
′
=>
”
,
)
;
i
f
(
!
i
n
a
r
r
a
y
(
fType, C(‘oss_exts’))){
back[‘msg′]=′文件格式不正确′;return
b
a
c
k
[
‘
m
s
g
′
]
=
′
文
件
格
式
不
正
确
′
;
r
e
t
u
r
n
back;
exit;
}
fSize=
f
S
i
z
e
=
fFiles[‘size’];
if(fSize>C(‘oss_maxSize’)){
fSize>C(‘oss_maxSize’)){
back[‘msg’]=’文件超过了1M’;
return $back;
exit;
}
$fname=$fFiles['name'];
$ext=substr($fname,stripos($fname,'.'));
$fup_n=$fFiles['tmp_name'];
$file_n=time().'_'.rand(100,999);
$object = $n."/".$file_n.$ext;//目标文件名
if (is_null($ossClient)) exit(1);
$ossClient->uploadFile($bucketName, $object, $fup_n);
if($isThumb==1){
// 图片缩放,参考https://help.aliyun.com/document_detail/44688.html?spm=5176.doc32174.6.481.RScf0S
$back['thumb']= $web.$object."?x-oss-process=image/resize,h_300,w_300";
}
$back['code']=1;
$back['msg']=$web.$object;
return $back;
exit;
}
第四步:控制器里的操作方法里面,例如控制器是Index,
public function upPic(){
//oss上传
bucketName=C(‘OSSTESTBUCKET′);
b
u
c
k
e
t
N
a
m
e
=
C
(
‘
O
S
S
T
E
S
T
B
U
C
K
E
T
′
)
;
ossClient = new \Org\OSS\OssClient(C(‘OSS_ACCESS_ID’), C(‘OSS_ACCESS_KEY’), C(‘OSS_ENDPOINT’), false);
web=C(‘OSSWEBSITE′);//图片
w
e
b
=
C
(
‘
O
S
S
W
E
B
S
I
T
E
′
)
;
/
/
图
片
fFiles=
FILES[‘pic′1];
F
I
L
E
S
[
‘
p
i
c
1
′
]
;
rs=ossUpPic(
fFiles,′s′,
f
F
i
l
e
s
,
′
s
′
,
ossClient,
bucketName,
b
u
c
k
e
t
N
a
m
e
,
web,0);
if(rs[‘code’]==1){
//图片
rs[‘code’]==1){ //图片
img =
rs[‘msg′];//如返回里面有缩略图:
r
s
[
‘
m
s
g
′
]
;
/
/
如
返
回
里
面
有
缩
略
图
:
thumb=rs[‘thumb’];
}else{
rs[‘thumb’]; }else{
this->error('图片有误:'.$rs[‘msg’]);
return;
}
}
第五步:调用,文件域名pic_1,要与第四步里面的$_FILES[‘pic_1’]一致。action地址为控制器的操作地址,例如:/index.php/Home/Index/upPic