Laravel Minio使用教程


一 : 安裝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;

    }

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM