Laravel は、Frank de Jonge によって開発された、強力なファイル システム抽象化を提供する PHP パッケージ Flysystem に基づいています。 Laravel ファイル システムの統合により、Amazon S3 や Rackspace クラウド ストレージなどのドライバーを使用してローカル ファイル システムを簡単に使用できるようになります。さらに、API はどのシステムでも同じであるため、これらのストレージ オプションの切り替えは簡単です。
ファイルシステム構成ファイルは config/filesystems.php にあります。すべての「ハード ドライブ」はこのファイルで構成でき、各ハード ドライブは特定のストレージ ドライブとストレージの場所を記述します。サポートされている各ドライバーのサンプル構成は構成ファイルに含まれているため、構成を編集してストレージ パラメーターと認証情報を反映するだけです。
もちろん、必要なだけディスクを構成でき、複数のディスクで同じドライバーを共有することもできます。
ローカル ドライバー
ローカル ドライバーを使用する場合、すべてのファイル操作は構成ファイルで定義されたルート ディレクトリを基準とすることに注意してください。デフォルトでは、この値はストレージ/アプリに設定されます。したがって、次の方法ではファイルを storage/app/file.txt に保存します:
Storage::disk('local')->put('file.txt', 'Contents');
その他のドライバーの前提条件
Amazon S3 または Rackspace ドライバーを使用する前に、インストールする必要がありますComposer パッケージを介した対応するドライバー:
ストレージ ファサードは、構成するすべてのディスクと対話するために使用されます。ファサードで put メソッドを使用してアバターをデフォルトのディスクに保存できます。ストレージ ファサードでメソッドを呼び出して最初にディスク メソッドを呼び出すと、メソッド呼び出しは自動的にデフォルトのディスクに渡されます:
<?phpnamespace App\Http\Controllers;use Storage;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 更新指定用户头像 * * @param Request $request * @param int $id * @return Response */ public function updateAvatar(Request $request, $id) { $user = User::findOrFail($id); Storage::put( 'avatars/'.$user->id, file_get_contents($request->file('avatar')->getRealPath()) ); }}
複数のディスクを使用する場合、ストレージ ファサードのメソッドを使用して、特定のディスクにアクセスします。もちろん、メソッド チェーンを使用してディスク上でメソッドを実行し続けることもできます。
$disk = Storage::disk('s3');$contents = Storage::disk('local')->get('file.jpg')
get メソッドは、指定されたファイルのコンテンツを取得するために使用されます。 、このメソッドはファイルを返します。 ネイティブ文字列の内容:
$contents = Storage::get('file.jpg');
指定されたファイルがディスク上に存在するかどうかを判断するために、exists メソッドが使用されます:
$exists = Storage::disk('s3')->exists('file.jpg');
ファイルのメタ情報
size メソッドは次で始まります。 ファイル サイズをバイト単位で返します。
$size = Storage::size('file1.jpg');
lastModified メソッドは、ファイルの最終変更時刻を UNIX タイムスタンプ形式で返します。
$time = Storage::lastModified('file1.jpg');
put メソッド ファイルをディスクに保存するために使用されます。 PHP リソースを put メソッドに渡すと、Flysystem の基礎となるストリーム サポートが使用されます。大きなファイルを処理する場合は、ファイル ストリームを使用することをお勧めします。
Storage::put('file.jpg', $contents);Storage::put('file.jpg', $resource);
copy メソッドは、ディスク上にすでに存在するファイルをある場所から別の場所にコピーします。
Storage::copy('old/file1.jpg', 'new/file1.jpg');
move メソッドディスク上に既に存在するファイルをある場所から別の場所に移動します。
Storage::move('old/file1.jpg', 'new/file1.jpg');
ファイルの先頭/末尾にコンテンツを追加します
prepend メソッドと append メソッドを使用すると、簡単に次のことができます。ファイルの先頭にコンテンツを挿入します /Ending:
Storage::prepend('file.log', 'Prepended Text');Storage::append('file.log', 'Appended Text');
delete メソッドは、単一のファイル名または複数のファイル配列を受け取り、ディスクからそれらを削除します:
Storage::delete('file.jpg');Storage::delete(['file1.jpg', 'file2.jpg']);
ディレクトリ内のすべてのファイルを取得する
すべてのファイルのリストを取得したい場合、files メソッドは指定されたディレクトリ内のすべてのファイルの配列を返します。サブディレクトリを含む指定されたディレクトリ内のファイルを取得するには、allFiles メソッドを使用します。
$files = Storage::files($directory);$files = Storage::allFiles($directory);
ディレクトリの下にあるすべてのサブディレクトリを取得します。
directory メソッドは、指定されたディレクトリの下にあるすべてのディレクトリの配列を返します。さらに、allDirectories メソッドを使用して、ネストされたすべてのサブディレクトリを取得できます。 ディレクトリ配列:
$directories = Storage::directories($directory);// 递归...$directories = Storage::allDirectories($directory);
ディレクトリの作成
makeDirectory メソッドは、サブディレクトリを含む指定されたディレクトリを (再帰的に) 作成します。 :
Storage::makeDirectory($directory);
ディレクトリの削除
最後に、 deleteDirectory メソッドを使用して、ディレクトリ内のすべてのファイルを含むディレクトリを削除します。
Storage::deleteDirectory($directory);
Laravel の Flysystem 統合はカスタム ドライバーをサポートしています。カスタム ファイル システムをセットアップするには、DropboxServiceProvider などのサービス プロバイダーを作成する必要があります。プロバイダーのブート メソッドでは、ストレージ ファサードの extend メソッドを使用してカスタム ドライバーを定義できます。
<?phpnamespace App\Providers;use Storage;use League\Flysystem\Filesystem;use Dropbox\Client as DropboxClient;use Illuminate\Support\ServiceProvider;use League\Flysystem\Dropbox\DropboxAdapter;class DropboxServiceProvider extends ServiceProvider{ /** * Perform post-registration booting of services. * * @return void */ public function boot() { Storage::extend('dropbox', function($app, $config) { $client = new DropboxClient( $config['accessToken'], $config['clientIdentifier'] ); return new Filesystem(new DropboxAdapter($client)); }); } /** * Register bindings in the container. * * @return void */ public function register() { // }}
extend メソッドの最初のパラメーターはドライバー名で、2 番目のパラメーターは取得するものです。 $app と $config 変数のクロージャー。パーサー クロージャは、LeagueFlysystemFilesystem インスタンスを返す必要があります。 $config 変数には、特定のディスクの構成ファイル config/filesystems.php で定義されたオプションが含まれています。
サービス プロバイダーを作成して拡張機能を登録した後、構成ファイル config/filesystem.php で Dropbox ドライバーを使用できるようになります。