阅读(2548)
赞(8)
Laravel 8 自定义文件系统
2021-07-02 16:44:05 更新
Laravel 内置的文件系统提供了一些开箱即用的驱动;当然,它不仅仅是这些,它还提供了与其他存储系统的适配器。通过这些适配器,您可以在您的 Laravel 应用中创建自定义驱动。
要安装自定义文件系统,您可能需要一个文件系统适配器。让我们将社区维护的 Dropbox 适配器添加到项目中:
composer require spatie/flysystem-dropbox
接下来,您可以创建一个诸如 DropboxServiceProvider
这样的 服务提供者 。在提供者的 boot
方法中,您可以使用 Storage
门面的 extend
方法来定义一个自定义驱动:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;
class DropboxServiceProvider extends ServiceProvider
{
/**
* 注册应用服务。
*
* @return void
*/
public function register()
{
//
}
/**
* 驱动应用服务。
*
* @return void
*/
public function boot()
{
Storage::extend('dropbox', function ($app, $config) {
$client = new DropboxClient(
$config['authorization_token']
);
return new Filesystem(new DropboxAdapter($client));
});
}
}
extend
方法的第一个参数是驱动的名称,第二个参数是一个闭包函数,这个闭包函数接收 $app
和 $config
变量。解析器的闭包函数必须返回一个 League\Flysystem\Filesystem
的实例。$config
变量包含了指定磁盘在 config/filesystems.php
文件中定义的值。
接下来,在您的 config/app.php
配置文件中注册服务提供者:
'providers' => [
// ...
App\Providers\DropboxServiceProvider::class,
];
当您成功注册了一个扩展的服务提供者后,您便可以在您的 config/filesystems.php
配置文件中使用 dropbox
驱动。