123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- namespace core\upload;
- use core\exception\UploadFileException;
- use OSS\Core\OssException;
- use OSS\OssClient;
- /**
- * 阿里云存储引擎 (OSS)
- */
- class Aliyun extends BaseUpload
- {
- protected function initialize(array $config = [])
- {
- parent::initialize($config);
- }
- public function client()
- {
- // true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上。
- // $is_cname = false;
- $access_key_id = $this->config['access_key'];
- $access_key_secret = $this->config['secret_key'];
- $endpoint = $this->config['endpoint'];// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
- return new OssClient($access_key_id, $access_key_secret, $endpoint);
- }
- /**
- * 执行上传
- * @param string $dir
- * @return true
- */
- public function upload(string $dir)
- {
- $this->validate();
- $bucket = $this->config['bucket'];
- try {
- $this->client()->uploadFile(
- $bucket,
- $this->getFullPath($dir),
- $this->getRealPath()
- );
- return true;
- } catch ( OssException $e ) {
- throw new UploadFileException($e->getMessage());
- }
- }
- /**
- * base64上云
- * @param string $base64_data
- * @param string|null $key
- * @return true
- */
- public function base64(string $base64_data, ?string $key = null)
- {
- $bucket = $this->config['bucket'];
- try {
- $base64_file = base64_decode($base64_data);
- if (!$base64_file) throw new UploadFileException('FILE_ERROE');
- $this->client()->putObject(
- $bucket,
- $key,
- $base64_file
- );
- return true;
- } catch ( OssException $e ) {
- throw new UploadFileException($e->getMessage());
- }
- }
- /**
- * Notes: 抓取远程资源
- * @param string $url
- * @param string|null $key
- * @return true
- */
- public function fetch(string $url, ?string $key = null)
- {
- $bucket = $this->config['bucket'];
- try {
- $content = file_get_contents($url);
- $this->client()->putObject(
- $bucket,
- $key,
- $content
- );
- return true;
- } catch ( OssException $e ) {
- throw new UploadFileException($e->getMessage());
- }
- }
- /**
- * 删除文件
- * @param string $file_name
- * @return true
- */
- public function delete(string $file_name)
- {
- $bucket = $this->config['bucket'];
- try {
- $this->client()->deleteObject($bucket, $file_name);
- return true;
- } catch ( OssException $e ) {
- throw new UploadFileException($e->getMessage());
- }
- }
- public function thumb($file_path, $thumb_type)
- {
- $thumb_config = config('upload.thumb.thumb_type');
- $thumb_data = [];
- foreach ($thumb_config as $k => $v) {
- if ($thumb_type == 'all' || $thumb_type == $k || (is_array($thumb_type) && in_array($k, $thumb_type))) {
- $width = $v['width'];
- $height = $v['height'];
- //拼装缩略路径
- $item_thumb = $file_path . '?x-oss-process=image/resize,h_' . $height . ',w_' . $width;
- $thumb_data[$k] = $item_thumb;
- }
- }
- return $thumb_data;
- }
- }
|