$obsClient
$obsClient :
<?php
/**
* This sample demonstrates how to post object under specified bucket from Huawei
* OBS using the OBS SDK for PHP.
*/
require dirname(__FILE__).'/vendor/autoload.php';
require dirname(__FILE__).'/obs-autoloader.php';
use Obs\S3\ObsClient;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Obs\Common\ObsException;
class Obs_upload{
private $obsClient;
private $ak = 'LKJHEFLXJXUKO1O31JW7';
private $sk = 'oxL98sRozthntFFl9NK89a2w1ng74stB4XbUCu37';
private $endpoint = 'obs.cn-east-2.myhwclouds.com/';
private $bucketName = 'shiguang';
public function __construct(){
/*
* Constructs a obs client instance with your account for accessing OBS
*/
$this->obsClient = ObsClient::factory ( [
'key' => $this->ak,
'secret' =>$this->sk,
'endpoint' => $this->endpoint,
'signature' => 'v4',
'path_style' => false,
'region' => 'CHINA' ,
'socket_timeout' => 30,
'connect_timeout' => 10
]);
}
public function do_upload($dir,$fileKey='file'){ //上传文件的键名,和目录(目录要以/结尾)
$file=@$_FILES[$fileKey];
if (!$file){
$out['code']=400;
$out['msg']='上传文件不存在';
$out['content']=['url'=>''];
return $out;
}
if (is_array($file['tmp_name'])){
$num=count(array_filter($file['tmp_name'])); //要上传的文件总数 array_filter()过滤掉空的数据组
$successNum=0;
$faileNum=0;
$content=[];
$id=0;
foreach (array_filter($file['tmp_name']) as $key=>$val){
$res=$this->upload_more($file['name'][$key], $val,$dir);
if ($res['code']==200){ //上传成功
$url=$res['content']['url'];
$content[]=[
'id'=>$id++,
'code'=>200,
'msg'=>'成功',
'url'=>$url
];
$successNum++; //上传成功 则成功数加1
}else{
$content[]=[
'id'=>$id++,
'code'=>$res['code'],
'msg'=>$res['msg'],
'url'=>''
];
$faileNum++; //上传失败 则失败数加1
}
}
if ($successNum==0){
$code=400;
}else{
$code=200;
}
$msg='共上传'.$num.'个文件,'.$successNum.'个文件上传成功,'.$faileNum.'个文件上传失败';
$out=[
'code'=>$code,
'msg'=>$msg,
'content'=>$content
];
}else{
$out=$this->upload_more($file['name'], $file['tmp_name'],$dir);
}
return $out;
}
public function upload_more($objectKey,$sourceFile,$dir=''){
try
{
$objectKey=uniqid().'_'.$objectKey;
if ($dir){
$objectKey=$dir.$objectKey;
}
/*
* Step 1: initiate multipart upload
*/
$resp = $this->obsClient -> initiateMultipartUpload(['Bucket'=>$this->bucketName,
'Key'=>$objectKey]);
$uploadId = $resp['UploadId'];
/*
* Step 2: upload a part
*/
$resp = $this->obsClient->uploadPart([
'Bucket'=>$this->bucketName,
'Key' => $objectKey,
'UploadId'=>$uploadId,
'PartNumber'=>1,
'SourceFile' => $sourceFile
]);
$etag = $resp['ETag'];
/*
* Step 3: complete multipart upload
*/
$this->obsClient->completeMultipartUpload([
'Bucket'=>$this->bucketName,
'Key'=>$objectKey,
'UploadId'=>$uploadId,
'Parts'=>[
['PartNumber'=>1,'ETag'=>$etag]
],
]);
$out=[
'code'=>200,
'msg'=>'上传成功',
'content'=>['url'=>$objectKey]
];
} catch ( ObsException $e ) {
/* echo 'Response Code:' . $e->getStatusCode () . PHP_EOL;
echo 'Error Message:' . $e->getExceptionMessage () . PHP_EOL;
echo 'Error Code:' . $e->getExceptionCode () . PHP_EOL;
echo 'Request ID:' . $e->getRequestId () . PHP_EOL;
echo 'Exception Type:' . $e->getExceptionType () . PHP_EOL; */
$out=[
'code'=>$e->getStatusCode (),
'msg'=>$e->getExceptionMessage (),
'content'=>[]
];
}
$this->obsClient->close ();
return $out;
}
//下载
public function download($objectKey){
try
{
//$localFilePath='/temp/' . $objectKey;
$resp = $this->obsClient -> getObject(['Bucket' => $this->bucketName, 'Key' => $objectKey, 'FilePath'=>$objectKey]);
$out=[
'code'=>200,
'msg'=>'下载成功',
'content'=>['url'=>$objectKey]
];
} catch ( ObsException $e ) {
/* echo 'Response Code:' . $e->getStatusCode () . PHP_EOL;
echo 'Error Message:' . $e->getExceptionMessage () . PHP_EOL;
echo 'Error Code:' . $e->getExceptionCode () . PHP_EOL;
echo 'Request ID:' . $e->getRequestId () . PHP_EOL;
echo 'Exception Type:' . $e->getExceptionType () . PHP_EOL; */
$out=[
'code'=>$e->getStatusCode (),
'msg'=>$e->getExceptionMessage (),
'content'=>[]
];
}
$this->obsClient->close ();
return $out;
}
//删除
public function del($objectKey){
try
{
$this->obsClient -> deleteObject(['Bucket' => $this->bucketName, 'Key' => $objectKey]);
$out=[
'code'=>200,
'msg'=>'删除成功',
'content'=>[]
];
} catch ( ObsException $e ) {
/* echo 'Response Code:' . $e->getStatusCode () . PHP_EOL;
echo 'Error Message:' . $e->getExceptionMessage () . PHP_EOL;
echo 'Error Code:' . $e->getExceptionCode () . PHP_EOL;
echo 'Request ID:' . $e->getRequestId () . PHP_EOL;
echo 'Exception Type:' . $e->getExceptionType () . PHP_EOL; */
$out=[
'code'=>$e->getStatusCode (),
'msg'=>$e->getExceptionMessage (),
'content'=>[]
];
}
$this->obsClient->close ();
return $out;
}
}