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