版权声明:版权所有。未经同意不得转发,装载 https://blog.csdn.net/limingyue0312/article/details/84184177
composer require aliyuncs/oss-sdk-php
配置文件如下
'ALIOSS_CONFIG' => array(
'KEY_ID' => '',
'KEY_SECRET' => '',
'END_POINT' => '',
'BUCKET' => '',
"OSS_WEB_SITE"=>'',
// 这个OSS_WEB_SITE是oss的bucket创建后的外网访问地址,如需二级域名,可以指向二级域名,具体可以参考阿里云控制台里面的oss'oss_maxSize'=>1048576, //1M
'OSS_EXTS' =>array(// 设置附件上传类型
'image/jpg',
'image/gif',
'image/png',
'image/jpeg',
'application/octet-stream',//阿里云好像都是通过二进制上传,似乎上面4个后缀设置起到什么用?
),
),
控制器
<?php
namespace Admin\Controller;
use Think\Controller;
class AliossController extends Controller
{
/**
* 2
* 实例化阿里云oos
* 3
* @return object 实例化得到的对象
* 4
*/
public function new_oss()
{
vendor('Alioss.autoload');
$config = C('ALIOSS_CONFIG');
$oss = new \OSS\OssClient($config['KEY_ID'], $config['KEY_SECRET'], $config['END_POINT']);
return $oss;
}
/* 上传文件到oss并删除本地文件
14
* @param string $path 文件路径
15
* @return bollear 是否上传
16
*/
public function oss_upload($path)
{
// 获取bucket名称
$bucket = C('ALIOSS_CONFIG.BUCKET');
// 先统一去除左侧的.或者/ 再添加./
if(!$path){
return false;
}
$oss_path = ltrim($path, '/');
$path = './' . $oss_path;
if (file_exists($path)) {
// 实例化oss类
$oss = $this->new_oss();
// 上传到oss
$result = $oss->uploadFile($bucket, $oss_path, $path);
// 如需上传到oss后 自动删除本地的文件 则删除下面的注释
unlink($path);
return $result;
// var_dump( $result);
} else {
// var_dump('2');
return false;
}
}
/* 删除oss上指定文件
40
* @param string $object 文件路径 例如删除 /Public/README.md文件 传Public/README.md 即可
*
*/
public function oss_delet_object($path)
{
// 实例化oss类
if(!$path){
var_dump("1");
return array('status'=>1, 'msg'=>'要删除的图片不能为空');
}
$oss = $this->new_oss();
// 获取bucket名称
$bucket = C('ALIOSS_CONFIG.BUCKET');
try{
$path =ltrim($path,'/'); //坑 不能有斜杆
$test = $oss->deleteObject($bucket, $path);
return true;
}catch (OssException $e){
// var_dump($e->getMessage());
return false;
}
}
/* 获取完整网络连接
52
* @param string $path 文件路径
53
* @return string http连接
54
*/
public function get_url($path)
{
// 如果是空;返回空
if (empty($path)) {
return '';
}
// 如果已经有http直接返回
if (strpos($path, 'http://') !== false) {
return $path;
}
$alioss = C('ALIOSS_CONFIG');
if (empty($alioss['KEY_ID'])) {
return 'http://' . $_SERVER['HTTP_HOST'] . $path;
} else {
return 'http://' . $alioss['BUCKET'] . '.' . $alioss['END_POINT'] . $path;
}
}
// 这个在叫到控制器中用
public function upFile()
{
$uplode = new \Think\Upload();//造实例化对象:造一个上传文件的类
$uplode->maxSize = "31457280";//上传文件的大小
$uplode->exts = array('jpg', 'gif', 'png', 'jpeg');//设置图片格式
$uplode->autoSub = true;//自动使用子目录保存上传文件 默认为true
$uplode->subName = array('date', 'Ymd');//文件命名方式已时期时间戳命名
$uplode->rootPath = "./public/";//表示在public文件夹下
$uplode->savePath = "./Uploads/";//设置附件上传目录:表示在public文件夹下自动建一个Uploads文件夹
// 上传文件
$info = $uplode->upload();
if (!$info) {
// 上传错误提示错误信息
$this->error($uplode->getError());
} else {
// 上传成功 获取上传文件信息
foreach ($info as $file) {
$path = $file['savepath'] . $file['savename'];
$filename = $file['savename'];
}
}
$path = '/public' . $path; //必须要加上完整的路径,否则在调用上传OSS方法的时候会判断该文件不存在。且'./Public/'最前面的点需要去掉,为了后面获取路径;
$res = $this->oss_upload($path);
if ($res) {
$file = get_url($path);
}
echo $file;
//上传到OSS的图片访问地址
}
//oss 文件是否存在
public function isfile($options){
// $options="Uploads/Editor/2018-09-03/5b8d30001a348.jpg" //不能有 /
$oss = $this->new_oss();
$bucket = C('ALIOSS_CONFIG.BUCKET');
$listObjectInfo = $oss->doesObjectExist($bucket, $options);
// var_dump($listObjectInfo);
return $listObjectInfo;
}
}