【发布时间】:2017-01-10 20:44:26
【问题描述】:
有没有办法使用 laravel 存储磁盘获取 splfileinfo 类型的对象?我需要一种将包装文件(存储在本地或 s3 服务上)的实例发送到AnalyzeImageService 的通用方法。
我认为 splfileinfo 的瞬间会很棒,因为它具有我的服务所需的所有方法(getSize 等)。
问题:如何从 laravel 获得一个包装文件的 \splfileinfo 对象。
【问题讨论】:
有没有办法使用 laravel 存储磁盘获取 splfileinfo 类型的对象?我需要一种将包装文件(存储在本地或 s3 服务上)的实例发送到AnalyzeImageService 的通用方法。
我认为 splfileinfo 的瞬间会很棒,因为它具有我的服务所需的所有方法(getSize 等)。
问题:如何从 laravel 获得一个包装文件的 \splfileinfo 对象。
【问题讨论】:
你好用户2373229,
为了设置自定义文件系统,您需要创建一个服务提供者。在 provider 的 boot 方法中,可以使用 Storage 门面的 extend 方法来定义自定义驱动。
<?php
namespace App\Providers;
use Storage;
use \SplFileInfo as SplFileInfo;
use Illuminate\Support\ServiceProvider;
class SplFileInfoServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Storage::extend('splfileinfo', function () {
return new SplFileInfo;
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}
一旦你创建了服务提供者来注册扩展,你可以在你的 config/filesystems.php 配置文件中使用 splfileinfo 驱动。
您可以参考文档:https://laravel.com/docs/5.3/filesystem#custom-filesystems
【讨论】:
\Storage::disk($disk)->allFiles($path) 的目录中的所有文件获取SplFileInfo 实例的集合(除了返回的集合类型为SplFileInfo,ofc)?