|
兰空图床是一款简单而强大的图床程序,但是目前并不支持minio/s3存储策略,作者计划在2.0版本开发此功能。
然而我不想等了,决定略写几行代码,以支持自建minio后端。有需要的看官可以参考。
大约如下几步:
一、撰写AWS S3存储driver,放到extend/strategy/driver/ 目录下:
- <?phpnamespace strategy\driver;use strategy\Driver;if (!function_exists('exif_imagetype')) { function exif_imagetype($filename) { if ((list($width, $height, $type, $attr) = getimagesize($filename)) !== false) { return $type; } return false; }}/** * Aws储存驱动 * * Class Aws * @package strategy\driver */class Aws implements Driver{ /** * 当前储存策略参数 * * [url=home.php?mod=space&uid=32455]@var[/url] array */ protected $options = []; /** * 错误信息 * * @var null */ protected $error = null; /** * Aws实例 * * @var null */ protected $s3 = null; /** * Aws constructor. * * @param array $options */ public function __construct($options = []) { $this->options = $options; try { $this->s3 = new \Aws\S3\S3Client([ 'version' => 'latest', 'region' => empty($this->options['s3_region']) ? 'us-east-1' : $this->options['s3_region'], 'endpoint' => $this->options['s3_endpoint'], 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $this->options['s3_key'], 'secret' => $this->options['s3_secret'], ], ]); } catch (\Exception $e) { $this->error = $e->getMessage(); } } /** * 创建文件 * * @param $pathname * @param $file * * @return bool */ public function create($pathname, $file) { try { $params = array( 'Bucket' => $this->options['s3_bucket'], 'Key' => $pathname, 'Body' => fopen($file, 'rb') ); if ($image_type = exif_imagetype($file)) { $params['ContentType'] = image_type_to_mime_type($image_type); } $this->s3->putObject($params); } catch (\Exception $e) { $this->error = $e->getMessage(); return false; } return true; } /** * 删除文件 * * @param $pathname * * @return bool */ public function delete($pathname) { try { $this->s3->deleteObject([ 'Bucket' => $this->options['s3_bucket'], 'Key' => $pathname, ]); } catch (\Exception $e) { $this->error = $e->getMessage(); return false; } return true; } /** * 删除多个文件 * * @param array $list * @return bool|mixed */ public function deletes(array $list) { try { $objects = []; foreach ($list as $value) { $objects[] = ['Key' => $value ]; } $this->s3->deleteObjects([ 'Bucket' => $this->options['s3_bucket'], 'Objects' => $objects, ]); } catch (\Exception $e) { $this->error = $e->getMessage(); return false; } return true; } public function getError() { return 'Aws:' . $this->error; }}
复制代码 二、增加aws-sdk-php依赖
- composer require aws/aws-sdk-php -n
复制代码 三、增加存储策略配置,在config/strategy.php 增加一项
- 'aws'=>['name'=>'AWS S3','class'=>\strategy\driver\Aws::class],
复制代码 四、执行SQL增加配置参数
- INSERT INTO `lsky_config` VALUES (0,'aws','text','text','s3_endpoint','Endpoint',NULL,'',''),(0,'aws','text','text','s3_key','Key',NULL,'',''),(0,'aws','text','text','s3_secret','Secret',NULL,'',''),(0,'aws','text','text','s3_bucket','Bucket','储存桶名称','',''),(0,'aws','text','text','aws_cdn_domain','域名',NULL,'','');
复制代码 五,在后台设置存储策略,完成
原文:https://www.wellphp.com/2022/02/ ... %e6%94%af%e6%8c%81/
觉得有用可以考虑给我打赏 https://shop.cgs.me/buy/1 |
|