From 16fe5d7f7dec3e818767de53430591dc80503247 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Fri, 7 Sep 2018 20:36:44 +0800 Subject: [PATCH] add: OssAdapter --- application/index/controller/Callback.php | 1 + application/index/model/FileManage.php | 152 +--------------- application/index/model/OssAdapter.php | 200 ++++++++++++++++++++++ application/index/model/QiniuAdapter.php | 12 ++ 4 files changed, 220 insertions(+), 145 deletions(-) create mode 100644 application/index/model/OssAdapter.php diff --git a/application/index/controller/Callback.php b/application/index/controller/Callback.php index e934e470..10ae2fea 100644 --- a/application/index/controller/Callback.php +++ b/application/index/controller/Callback.php @@ -25,6 +25,7 @@ class Callback extends Controller{ public function Oss(){ ob_end_clean(); + error_log("sadasdasdsadsasadasasdasdasd"); header('Content-Type: application/json'); $handllerObj = new CallbackHandler(file_get_contents("php://input")); $handllerObj -> ossHandler(Request::instance()->header('Authorization'),Request::instance()->header('x-oss-pub-key-url')); diff --git a/application/index/model/FileManage.php b/application/index/model/FileManage.php index 3b4bae2f..57cf4310 100644 --- a/application/index/model/FileManage.php +++ b/application/index/model/FileManage.php @@ -5,8 +5,6 @@ use think\Model; use think\Db; use think\Validate; use \app\index\model\Option; -use OSS\OssClient; -use OSS\Core\OssException; use Upyun\Upyun; use Upyun\Config; @@ -51,7 +49,10 @@ class FileManage extends Model{ $this->adapter = new \app\index\model\LocalAdapter($this->fileData,$this->policyData,$this->userData); break; case 'qiniu': - $this->adapter = new \app\index\model\QiniuAdapter($this->fileData,$this->policyData,$this->userData); + $this->adapter = new \app\index\model\QiniuAdapter($this->fileData,$this->policyData,$this->userData); + break; + case 'oss': + $this->adapter = new \app\index\model\OssAdapter($this->fileData,$this->policyData,$this->userData); break; default: # code... @@ -115,15 +116,6 @@ class FileManage extends Model{ } } - /** - * 获取OSS策略文本文件内容 - * - * @return string 文件内容 - */ - public function getOssFileContent(){ - return file_get_contents($this->ossPreview()[1]); - } - /** * 获取又拍云策略文本文件内容 * @@ -195,28 +187,6 @@ class FileManage extends Model{ echo ('{ "result": { "success": true} }'); } - /** - * 保存OSS文件内容 - * - * @param string $content 文件内容 - * @return void - */ - public function saveOssContent($content){ - $accessKeyId = $this->policyData["ak"]; - $accessKeySecret = $this->policyData["sk"]; - $endpoint = "http".ltrim(ltrim($this->policyData["server"],"https"),"http"); - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - die('{ "result": { "success": false, "error": "鉴权失败" } }'); - } - try{ - $ossClient->putObject($this->policyData["bucketname"], $this->fileData["pre_name"], $content); - } catch(OssException $e) { - die('{ "result": { "success": false, "error": "编辑失败" } }'); - } - } - /** * 保存Upyun文件内容 * @@ -634,7 +604,8 @@ class FileManage extends Model{ LocalAdapter::DeleteFile($value,$uniquePolicy["localPolicyData"][$key][0]); self::deleteFileRecord(array_column($value, 'id'),array_sum(array_column($value, 'size')),$value[0]["upload_user"]); }else if(in_array($key,$uniquePolicy["ossList"])){ - self::ossDelete($value,$uniquePolicy["ossPolicyData"][$key][0]); + LocalAdapter::DeleteFile($value,$uniquePolicy["ossPolicyData"][$key][0]); + self::deleteFileRecord(array_column($value, 'id'),array_sum(array_column($value, 'size')),$value[0]["upload_user"]); }else if(in_array($key,$uniquePolicy["upyunList"])){ self::upyunDelete($value,$uniquePolicy["upyunPolicyData"][$key][0]); }else if(in_array($key,$uniquePolicy["s3List"])){ @@ -712,30 +683,6 @@ class FileManage extends Model{ } - /** - * 删除某一策略下的指定OSS文件 - * - * @param array $fileList 待删除文件的数据库记录 - * @param array $policyData 待删除文件的上传策略信息 - * @return void - */ - static function ossDelete($fileList,$policyData){ - $accessKeyId = $policyData["ak"]; - $accessKeySecret = $policyData["sk"]; - $endpoint = "http".ltrim(ltrim($policyData["server"],"https"),"http"); - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - return false; - } - try{ - $ossClient->deleteObjects($policyData["bucketname"], array_column($fileList, 'pre_name')); - } catch(OssException $e) { - return false; - } - self::deleteFileRecord(array_column($fileList, 'id'),array_sum(array_column($fileList, 'size')),$fileList[0]["upload_user"]); - } - /** * 删除某一策略下的指定upyun文件 * @@ -777,29 +724,6 @@ class FileManage extends Model{ ])->setDec('used_storage', $size); } - public function getOssThumb(){ - if(!$this->policyData['bucket_private']){ - $fileUrl = $this->policyData["url"].$this->fileData["pre_name"]."?x-oss-process=image/resize,m_lfit,h_39,w_90"; - return[true,$fileUrl]; - }else{ - $accessKeyId = $this->policyData["ak"]; - $accessKeySecret = $this->policyData["sk"]; - $endpoint = $this->policyData["url"]; - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - return [false,0]; - } - $baseUrl = $this->policyData["url"].$this->fileData["pre_name"]; - try{ - $signedUrl = $ossClient->signUrl($this->policyData["bucketname"], $this->fileData["pre_name"], Option::getValue("timeout"),'GET', array("x-oss-process" => 'image/resize,m_lfit,h_39,w_90')); - } catch(OssException $e) { - return [false,0]; - } - return[true,$signedUrl]; - } - } - private function getUpyunThumb(){ $picInfo = explode(",",$this->fileData["pic_info"]); $thumbSize = self::getThumbSize($picInfo[0],$picInfo[1]); @@ -841,29 +765,6 @@ class FileManage extends Model{ } } - public function ossPreview(){ - if(!$this->policyData['bucket_private']){ - $fileUrl = $this->policyData["url"].$this->fileData["pre_name"]; - return[true,$fileUrl]; - }else{ - $accessKeyId = $this->policyData["ak"]; - $accessKeySecret = $this->policyData["sk"]; - $endpoint = $this->policyData["url"]; - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - return [false,0]; - } - $baseUrl = $this->policyData["url"].$this->fileData["pre_name"]; - try{ - $signedUrl = $ossClient->signUrl($this->policyData["bucketname"], $this->fileData["pre_name"], Option::getValue("timeout")); - } catch(OssException $e) { - return [false,0]; - } - return[true,$signedUrl]; - } - } - public function qiniuDownload(){ if(!$this->policyData['bucket_private']){ $fileUrl = $this->policyData["url"].$this->fileData["pre_name"]."?attname=".urlencode($this->fileData["orign_name"]); @@ -890,28 +791,6 @@ class FileManage extends Model{ return [1,$remote->download($this->fileData["pre_name"],$this->fileData["orign_name"])]; } - public function ossDownload(){ - if(!$this->policyData['bucket_private']){ - return[true,"/File/OssDownload?url=".urlencode($this->policyData["url"].$this->fileData["pre_name"])."&name=".urlencode($this->fileData["orign_name"])]; - }else{ - $accessKeyId = $this->policyData["ak"]; - $accessKeySecret = $this->policyData["sk"]; - $endpoint = $this->policyData["url"]; - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - return [false,0]; - } - $baseUrl = $this->policyData["url"].$this->fileData["pre_name"]; - try{ - $signedUrl = $ossClient->signUrl($this->policyData["bucketname"], $this->fileData["pre_name"], Option::getValue("timeout"),'GET', array("response-content-disposition" => 'attachment; filename='.$this->fileData["orign_name"])); - } catch(OssException $e) { - return [false,0]; - } - return[true,$signedUrl]; - } - } - /** * [List description] * @param [type] $path [description] @@ -1082,7 +961,7 @@ class FileManage extends Model{ return QiniuAdapter::deleteSingle($fname,$policy); break; case 'oss': - return self::deleteOssFile($fname,$policy); + return OssAdapter::deleteOssFile($fname,$policy); break; case 'upyun': return self::deleteUpyunFile($fname,$policy); @@ -1096,23 +975,6 @@ class FileManage extends Model{ } } - static function deleteOssFile($fname,$policy){ - $accessKeyId = $policy["ak"]; - $accessKeySecret = $policy["sk"]; - $endpoint = "http".ltrim(ltrim($policy["server"],"https"),"http"); - try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); - } catch (OssException $e) { - return false; - } - try{ - $ossClient->deleteObject($policy["bucketname"], $fname); - } catch(OssException $e) { - return false; - } - return true; - } - static function deleteUpyunFile($fname,$policy){ $bucketConfig = new Config($policy["bucketname"], $policy["op_name"], $policy["op_pwd"]); $client = new Upyun($bucketConfig); diff --git a/application/index/model/OssAdapter.php b/application/index/model/OssAdapter.php new file mode 100644 index 00000000..66e874dc --- /dev/null +++ b/application/index/model/OssAdapter.php @@ -0,0 +1,200 @@ +fileModel = $file; + $this->policyModel = $policy; + $this->userModel = $user; + } + + /** + * 获取OSS策略文本文件内容 + * + * @return string 文件内容 + */ + public function getFileContent(){ + return file_get_contents($this->Preview()[1]); + } + + /** + * 签名OSS预览URL + * + * @return void + */ + public function Preview(){ + if(!$this->policyModel['bucket_private']){ + $fileUrl = $this->policyModel["url"].$this->fileModel["pre_name"]; + return[true,$fileUrl]; + }else{ + $accessKeyId = $this->policyModel["ak"]; + $accessKeySecret = $this->policyModel["sk"]; + $endpoint = $this->policyModel["url"]; + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + return [false,0]; + } + $baseUrl = $this->policyModel["url"].$this->fileModel["pre_name"]; + try{ + $signedUrl = $ossClient->signUrl($this->policyModel["bucketname"], $this->fileModel["pre_name"], Option::getValue("timeout")); + } catch(OssException $e) { + return [false,0]; + } + return[true,$signedUrl]; + } + } + + /** + * 保存OSS文件内容 + * + * @param string $content 文件内容 + * @return void + */ + public function saveContent($content){ + $accessKeyId = $this->policyModel["ak"]; + $accessKeySecret = $this->policyModel["sk"]; + $endpoint = "http".ltrim(ltrim($this->policyModel["server"],"https"),"http"); + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + die('{ "result": { "success": false, "error": "鉴权失败" } }'); + } + try{ + $ossClient->putObject($this->policyModel["bucketname"], $this->fileModel["pre_name"], $content); + } catch(OssException $e) { + die('{ "result": { "success": false, "error": "编辑失败" } }'); + } + } + + /** + * 获取缩略图地址 + * + * @return string 缩略图地址 + */ + public function getThumb(){ + if(!$this->policyModel['bucket_private']){ + $fileUrl = $this->policyModel["url"].$this->fileModel["pre_name"]."?x-oss-process=image/resize,m_lfit,h_39,w_90"; + return[true,$fileUrl]; + }else{ + $accessKeyId = $this->policyModel["ak"]; + $accessKeySecret = $this->policyModel["sk"]; + $endpoint = $this->policyModel["url"]; + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + return [false,0]; + } + $baseUrl = $this->policyModel["url"].$this->fileModel["pre_name"]; + try{ + $signedUrl = $ossClient->signUrl($this->policyModel["bucketname"], $this->fileModel["pre_name"], Option::getValue("timeout"),'GET', array("x-oss-process" => 'image/resize,m_lfit,h_39,w_90')); + } catch(OssException $e) { + return [false,0]; + } + return[true,$signedUrl]; + } + } + /** + * 删除某一策略下的指定OSS文件 + * + * @param array $fileList 待删除文件的数据库记录 + * @param array $policyData 待删除文件的上传策略信息 + * @return void + */ + static function ossDelete($fileList,$policyData){ + $accessKeyId = $policyData["ak"]; + $accessKeySecret = $policyData["sk"]; + $endpoint = "http".ltrim(ltrim($policyData["server"],"https"),"http"); + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + return false; + } + try{ + $ossClient->deleteObjects($policyData["bucketname"], array_column($fileList, 'pre_name')); + } catch(OssException $e) { + return false; + } + self::deleteFileRecord(array_column($fileList, 'id'),array_sum(array_column($fileList, 'size')),$fileList[0]["upload_user"]); + } + + /** + * 生成文件下载URL + * + * @return array + */ + public function Download(){ + if(!$this->policyModel['bucket_private']){ + return[true,"/File/OssDownload?url=".urlencode($this->policyModel["url"].$this->fileModel["pre_name"])."&name=".urlencode($this->fileModel["orign_name"])]; + }else{ + $accessKeyId = $this->policyModel["ak"]; + $accessKeySecret = $this->policyModel["sk"]; + $endpoint = $this->policyModel["url"]; + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + return [false,0]; + } + $baseUrl = $this->policyModel["url"].$this->fileModel["pre_name"]; + try{ + $signedUrl = $ossClient->signUrl($this->policyModel["bucketname"], $this->fileModel["pre_name"], Option::getValue("timeout"),'GET', array("response-content-disposition" => 'attachment; filename='.$this->fileModel["orign_name"])); + } catch(OssException $e) { + return [false,0]; + } + return[true,$signedUrl]; + } + } + + /** + * 删除临时文件 + * + * @param string $fname 文件名 + * @param array $policy 上传策略信息 + * @return boolean + */ + static function deleteOssFile($fname,$policy){ + $accessKeyId = $policy["ak"]; + $accessKeySecret = $policy["sk"]; + $endpoint = "http".ltrim(ltrim($policy["server"],"https"),"http"); + try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); + } catch (OssException $e) { + return false; + } + try{ + $ossClient->deleteObject($policy["bucketname"], $fname); + } catch(OssException $e) { + return false; + } + return true; + } + + /** + * 签名临时URL用于Office预览 + * + * @return array + */ + public function signTmpUrl(){ + return $this->Preview(); + } + + +} + +?> \ No newline at end of file diff --git a/application/index/model/QiniuAdapter.php b/application/index/model/QiniuAdapter.php index cc3fcb4b..207c2622 100644 --- a/application/index/model/QiniuAdapter.php +++ b/application/index/model/QiniuAdapter.php @@ -40,6 +40,9 @@ class QiniuAdapter extends Model{ * @return void */ public function Preview($thumb=null){ + if($thumb===true){ + $thumb =null; + } if(!$this->policyModel['bucket_private']){ $fileUrl = $this->policyModel["url"].$this->fileModel["pre_name"].$thumb; return[true,$fileUrl]; @@ -132,6 +135,15 @@ class QiniuAdapter extends Model{ } } + /** + * 签名临时URL用于Office预览 + * + * @return array + */ + public function signTmpUrl(){ + return $this->Preview(); + } + } ?> \ No newline at end of file