一 : 安裝minio參考 centos7 安裝minio + supervisor
minio是基於Apache Licence v2.0開源協議的對象存儲服務,兼容亞馬遜S3雲存儲服務接口,minio官方只提供了js、java、python、Golang、.Net的SDK,並未提供PHP版的SDK,不過因為兼容亞馬遜S3雲存儲服務接口,所以可以使用亞馬遜提供的aws-sdk-php SDK,具體可參考Minio Cookbook 中文版。
AWS針對laravel使用aws-sdk-php又做了再次封裝,github地址為aws-sdk-php-laravel。

二: 安裝aws-sdk-php-laravel三方庫
1 composer.json 添加
{ "require": { "aws/aws-sdk-php-laravel": "~3.0" } }
執行composer 更新命令
php composer.phar update
2 配置config/app.php 和 AWS Facade
'providers' => array( // ... Aws\Laravel\AwsServiceProvider::class, )
'aliases' => array( // ... 'AWS' => Aws\Laravel\AwsFacade::class, )
3 生成configuration文件
php artisan vendor:publish --provider="Aws\Laravel\AwsServiceProvider"

(1)AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 就是minio web客戶端登錄時使用的 Access Key和Secret Key

(2)endpoint 新創建的配置文件默認沒有這個配置項,需要手動添加(至少我是這樣的),添加的就是minio的訪問地址
(3)具體的配置項可以參考AWS SDK for PHP版本 3 的配置
三 使用:
aws-sdk-php-laravel中給的demo比較簡單,實際開發可能會使用更多的功能,具體參考AWS SDK for PHP 3.x。
下面給出幾個我自己編寫的工具方法,僅供參考,其他的都是一個套路
1 多張圖片同時上傳
/** * 多圖上傳 * @param $request * @param string $field * @return array|null */ public function multipleStoragePhoto($request, $field = "uploadFile") { if (!$request->hasFile($field)) { return null; } $files = $request->file('uploadFile'); #路徑數組 $keyArr = array(); $s3 = AwsFacade::createClient('s3'); foreach ($files as $photo) { if ($photo->isValid()) { //文件擴展名 $extend = $photo->extension(); # 自定義文件名 $fileName = date('Ymd') . '-' . uniqid() . '.' . $extend; $s3_return = $s3->putObject([ 'Bucket' => 'bucket_test', //存儲桶名稱 'Key' => $fileName, //文件名(包括后綴名) 'Body' => file_get_contents($photo) //要上傳的文件 ]); if ($s3_return['@metadata']['statusCode'] == 200) { $keyArr[] = 'bucket_test' . '/' . $fileName; } else { \Log::info('圖片上傳失敗'); continue; } } } return $keyArr; }
2 刪除圖片
/** * 刪除圖片 * @param $url */ public function deletePhoto($url) { $s3 = AwsFacade::createClient('s3'); $s3->deleteObject([ 'Bucket' => 'bucket_test', //存儲桶名稱 'Key' => strrchr($url, '/'), //文件名 去掉time-management ]); }
3 批量刪除圖片
/** * 刪除多張圖片 * @param $urls */ public function deletePhotos($urls) { $keys = array(); foreach ($urls as $url) { $keys[] = array('Key' => strrchr($url, '/')); } $s3 = AwsFacade::createClient('s3'); $s3->deleteObjects([ 'Bucket' => 'bucket_test', //存儲桶名稱
'Delete' => [ 'Objects' => $keys ] ]);
}
4 批量復制
/** * 批量復制圖片 * @param $sourceUrls * @return array key數組 */ public function copyPhotos($sourceUrls) { $keyArr = array(); $s3 = AwsFacade::createClient('s3'); foreach ($sourceUrls as $sourceUrl) { #文件擴展名 $extend = strrchr($sourceUrl, '.'); # 自定義文件名 $fileName = date('Ymd') . '-' . uniqid() . $extend; $s3->copyObject([ 'Bucket' => 'bucket_test', //存儲桶名稱 'CopySource' => $sourceUrl, 'Key' => $fileName, ]); $keyArr[] = 'bucket_test' . '/' . $fileName; } return $keyArr; }
