如何使用Minio Server做为Laravel自定义文件存储
Laravel
有一个可定制的文件存储系统,能够为它创建自定义的磁盘。在本文中,我们将实现一个自定义文件系统磁盘来使用Minio服务器来管理文件。
从这里下载并安装Minio Server。
为aws-s3
安装league/flysystem
包:fork基于https://github.com/thephpleague/flysystem-aws-s3-v3
composer require coraxster/flysystem-aws-s3-v3-minio
在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
并不是必须的,而且可以设置成任何值。
现在你可以用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使用的理解。