Skip to content

Latest commit

 

History

History
110 lines (86 loc) · 3.18 KB

how-to-use-minio-as-laravel-file-storage.md

File metadata and controls

110 lines (86 loc) · 3.18 KB

如何使用Minio Server做为Laravel自定义文件存储

Laravel有一个可定制的文件存储系统,能够为它创建自定义的磁盘。在本文中,我们将实现一个自定义文件系统磁盘来使用Minio服务器来管理文件。

1. 前提条件

这里下载并安装Minio Server。

2. 给Laravel安装必要的依赖

aws-s3 安装league/flysystem包:fork基于https://github.com/thephpleague/flysystem-aws-s3-v3

composer require coraxster/flysystem-aws-s3-v3-minio

3. 创建Minio Storage ServiceProvider

app/Providers/文件下创建MinioStorageServiceProvider.php文件,内容如下:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Aws\S3\S3Client;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use League\Flysystem\Filesystem;
use Storage;

class MinioStorageServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
      Storage::extend('minio', function ($app, $config) {
          $client = new S3Client([
              'credentials' => [
                  'key'    => $config["key"],
                  'secret' => $config["secret"]
              ],
              'region'      => $config["region"],
              'version'     => "latest",
              'bucket_endpoint' => false,
              'use_path_style_endpoint' => true,
              'endpoint'    => $config["endpoint"],
          ]);
          $options = [
              'override_visibility_on_copy' => true
          ];
          return new Filesystem(new AwsS3Adapter($client, $config["bucket"], '', $options));
      });
    }

    /**
     * 注册应用服务
     *
     * @return void
     */
    public function register()
    {

    }
}

通过在providers部分的config/app.php中添加这一行来注册服务提供者:

App\Providers\MinioStorageServiceProvider::class

config/filesystems.php文件的disks部分添加minio配置:

  'disks' => [
    // 其它磁盘

    'minio' => [
        'driver' => 'minio',
        'key' => env('MINIO_KEY', 'your minio server key'),
        'secret' => env('MINIO_SECRET', 'your minio server secret'),
        'region' => 'us-east-1',
        'bucket' => env('MINIO_BUCKET','your minio bucket name'),
        'endpoint' => env('MINIO_ENDPOINT','http://localhost:9000')
    ]

  ]

注意 : region并不是必须的,而且可以设置成任何值。

4. 在Laravel中使用Minio存储

现在你可以用disk方法来使用minio磁盘。

Storage::disk('minio')->put('avatars/1', $fileContents);

或者你可以在filesystems.php配置文件中将minio设为默认云盘:

'cloud' => env('FILESYSTEM_CLOUD', 'minio'),

示例工程

如果你想的话,你可以自己研究laravel-minio-sample项目和unit tests,来加深对Laravel结合Minio Server使用的理解。