ファイルストレージ
- 構成
- パブリック ディスク
- ファイルの取得
- ファイルのダウンロード ##ファイルの可視性
- カスタム ファイル システム
- #はじめにLaravel は強力なファイル システムの抽象化を提供します。これは、Frank de Jonge の強力な Flysystem のおかげです。
ファイル システムの構成ファイルは、config/filesystems.php# にあります。 ##。このファイルでは、すべての「ディスク」を構成できます。各ディスクは、特定のストレージ ドライブとストレージの場所を表します。サポートされている各ドライバーのサンプル構成は、構成ファイルに含まれています。したがって、ストレージ設定と資格情報を反映するように構成を変更するだけです。
もちろん、必要に応じて複数のディスクを構成でき、複数のディスクで同じドライバーを共有することもできます。
パブリック ディスク
public
ディスクは、パブリックにアクセスできるファイル用です。デフォルトでは、public
ディスクは local
ドライバーを使用し、これらのファイルを storage/app/public
ディレクトリに保存します。ネットワーク経由でアクセスできるようにするには、public/storage
から storage/app/public
へのシンボリック リンクを作成する必要があります。このアプローチでは、パブリックにアクセス可能なファイルを同じディレクトリに保持するため、Envoyer などのゼロダウンタイム展開システムを使用する場合に、展開間でファイルを簡単に共有できます。 Artisan コマンド storage:link
を使用してシンボリック リンクを作成できます:
Artisan コマンド storage:link
を使用してシンボリック リンクを作成できます:
php artisan storage:link
もちろん、ファイルが保存され、シンボリックリンクが作成されたら、ヘルパー関数 asset
を使用してファイルの URL を作成できます:
echo asset('storage/file.txt');#ローカル ドライバー
local ドライバーを使用する場合、すべてのファイル操作は、使用する
root ディレクトリに関連します。設定ファイルで定義します。このディレクトリのデフォルト値は
storage/app です。したがって、次のメソッドはファイルを
storage/app/file.txt に保存します:
Storage::disk('local')->put('file.txt', 'Contents');#ドライバー プログラム前提条件Composer パッケージSFTP、S3、Rackspace などのドライバーを使用する前に、Composer を通じて対応するソフトウェア パッケージをインストールする必要があります:
- SFTP:
- league/flysystem-sftp ~1.0
- league/flysystem-aws-s3-v3 ~1.0
- league/flysystem-rackspace ~1.0
- CachedAdapter:
- league/flysystem-cached-adapter ~1.0
config/filesystems.php 構成ファイルにあります。このファイルには、S3 ドライバーのサンプル構成配列が含まれています。このアレイは、独自の S3 構成と認証情報を使用して自由に変更できます。便宜上、これらの環境変数は AWS CLI で使用される命名規則と一致しています。
filesystems .php# には含まれていません。 ## ファイル。必要に応じて、次のサンプル構成を使用できます: 'ftp' => [
'driver' => 'ftp',
'host' => 'ftp.example.com',
'username' => 'your-username',
'password' => 'your-password',
// 可选的 FTP 配置项...
// 'port' => 21,
// 'root' => '',
// 'passive' => true,
// 'ssl' => true,
// 'timeout' => 30,
],
SFTP ドライバー設定
Laravel の Flysystem 統合パッケージは SFTP と非常にうまく連携しますが、フレームワークのデフォルト設定ファイル filesystems.php
にはサンプル設定が含まれていません。 SFTP ファイル システムを構成する場合は、次のサンプル構成を使用できます。
'sftp' => [ 'driver' => 'sftp', 'host' => 'example.com', 'username' => 'your-username', 'password' => 'your-password', // 基于 SSH 密钥的身份验证设置... // 'privateKey' => '/path/to/privateKey', // 'password' => 'encryption-password', // 可选的 SFTP 配置... // 'port' => 22, // 'root' => '', // 'timeout' => 30, ],
Rackspace ドライブ構成
Laravel の Flysystem 統合パッケージは、Rackspace と非常によく連携します。ただし、フレームワークのデフォルト構成ファイル filesystems.php
にはサンプル構成が含まれていません。 Rackspace ファイル システムを構成する場合は、次の構成例を使用できます:
'rackspace' => [ 'driver' => 'rackspace', 'username' => 'your-username', 'key' => 'your-key', 'container' => 'your-container', 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', 'region' => 'IAD', 'url_type' => 'publicURL', ],
Cache
指定したディスク機能のキャッシュを有効にするには、ディスクの構成項目に cache
を直接追加する必要があります。 cache
オプションは、キャッシュ ドライバー名 store
によって駆動されるキャッシュ構成の配列である必要があります (翻訳者注: ドキュメント disk
の元の説明テキストは、例のコード #store の ## と同じです。これは矛盾しています。コードを検証すると、実際には
store であるはずなので、この変更が行われました。)、有効期限 (秒)
期限切れ、およびキャッシュ プレフィックス
prefix 構成:
's3' => [ 'driver' => 's3', // 驱动器其他配置... 'cache' => [ 'store' => 'memcached', 'expire' => 600, 'prefix' => 'cache-prefix', ], ],ディスク インスタンスの取得
ストレージ ファサードは、構成されたディスクとの対話で使用できます。たとえば、ファサードで
put メソッドを使用して、アバターをデフォルトのディスクに保存できます。最初に
disk メソッドを使用せずに
Storage ファサードでメソッドを使用すると、呼び出されたメソッドは自動的にデフォルトのディスクに渡されます:
use Illuminate\Support\Facades\Storage; Storage::put('avatars/1', $fileContents);If application複数のディスクと相互運用したい場合は、
Storage ファサードの
disk メソッドを使用して、特定のディスク上のファイルを操作できます:
Storage::disk('s3')->put('avatars/1', $fileContents);ファイルの取得
get メソッドを使用してファイルの内容を取得できます。このメソッドはファイルの元の文字列を返します。 。 コンテンツ。すべてのファイル パスの指定は、ディスクに構成された「ルート」ディレクトリを基準とする必要があることに注意してください。
$contents = Storage::get('file.jpg');
exists このメソッドを使用すると、指定されたファイルがディスク上に存在するかどうかを確認できます。
$exists = Storage::disk('s3')->exists('file.jpg');
メソッドを使用して、ユーザーのブラウザで、パスを指定してファイルをダウンロードします。 download
メソッドは、メソッドの 2 番目のパラメーターとしてファイル名を受け取ります。これにより、ユーザーがファイルをダウンロードするときに表示されるファイル名が決まります。最後に、メソッドの 3 番目の引数として HTTP 配列ヘッダーを渡すことができます: return response()->download('file.jpg');
return response()->download('file.jpg', $name, $headers);
ファイル URL
url
メソッドを使用して、特定のファイルの URL を取得できます。 local
ドライバーを使用している場合は、通常、指定されたパスに /storage
を追加し、そのファイルへの相対 URL を返します。 s3
または rackspace
ドライバーを使用している場合は、完全なリモート URL が返されます:
use Illuminate\Support\Facades\Storage; $url = Storage::url('file.jpg');
{note}
local
ドライバーでは、パブリックにアクセスできるようにするすべてのファイルをstorage/app/public
ディレクトリに配置する必要があります。さらに、public/storage
にシンボリック リンク を作成し、storage/app/public
ディレクトリを指すようにする必要があります。
一時 URL
s3
または rackspace
ドライバーを使用してファイルを保存する場合は、 # を使用できます。 ##temporaryUrl メソッドは、指定されたファイルの一時 URL を作成します。このメソッドは、パスと
DateTime インスタンスを受け取り、URL の有効期限がいつ切れるかを指定します。
$url = Storage::temporaryUrl( 'file.jpg', now()->addMinutes(5) );カスタム ローカル URL ホスト必要な場合
local を使用するには、ドライバーはディスクに保存されているファイルのホストを事前定義します。ディスク構成配列に
url オプションを追加できます:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],ファイル メタデータLaravel は、ファイルの読み取りと書き込みに加えて、ファイル自体に関する情報も提供できます。メソッドを使用して、ファイルのサイズ (バイト単位) を取得できます:
use Illuminate\Support\Facades\Storage; $size = Storage::size('file.jpg');
lastModified このメソッドは、ファイルが最後に変更されたときの UNIX タイムスタンプを返します: $time = Storage::lastModified('file.jpg');
Save Fileput
メソッドを使用して、元のファイルの内容をディスクに保存できます。また、PHP のresource を
put メソッドに渡すこともできます。これにより、ファイル システムでの基礎となるストリーム サポートが使用されます。大きなファイルを扱う場合は、この方法を使用することを強くお勧めします:
use Illuminate\Support\Facades\Storage; Storage::put('file.jpg', $contents); Storage::put('file.jpg', $resource);
自動ストリーミング
Laravelで指定されたファイルを保存場所に自動的にストリーミングしたい場合は、 putFile
または putFileAs
メソッドを使用できます。このメソッドは、Illuminate\Http\File
または Illuminate\Http\UploadedFile
インスタンスを受け取り、ファイルを希望の場所に自動的にストリーミングします。
メソッドには、注意すべき点がいくつかあります。ファイル名ではなくディレクトリ名を指定します。デフォルトでは、putFile
メソッドはファイル名として一意の ID を生成します。ファイル拡張子は、検出されたファイルの MIME タイプに基づいて決定されます。 putFile
メソッドはファイル パスを返すため、ファイル パス (生成されたファイル名を含む) をデータベースに保存できます。
メソッドと putFileAs
メソッドは、保存されたファイルの「可視性」を指定するメソッドも受け入れます。 S3 などのクラウド ディスクにファイルを保存し、そのファイルにパブリックにアクセスできるようにする場合は、次の関数を使用できます: use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
// 自动为文件名生成唯一的ID...
Storage::putFile('photos', new File('/path/to/photo'));
// 手动指定文件名...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
prepend
メソッドと append
メソッドを使用すると、ファイルの先頭または末尾にデータを書き込むことができます。 Storage::putFile('photos', new File('/path/to/photo'), 'public');
メソッドはファイルをディスク上の新しい場所にコピーするために使用され、move
メソッドはファイルの名前を変更するか新しい場所に移動するために使用されます。 ##
Storage::prepend('file.log', 'Prepended Text'); Storage::append('file.log', 'Appended Text');
ファイル アップロードWeb アプリケーションで最も一般的に使用されるファイル ストレージ シナリオは、アバター、写真、およびファイルをアップロードすることです。ファイル。 Laravel のファイルをアップロードするインスタンス メソッド store
は、ファイルのアップロードとストレージの問題を簡単に処理できます。ファイル保存パスをパラメータとして指定してstore メソッドを呼び出すだけです。
Storage::copy('old/file.jpg', 'new/file.jpg'); Storage::move('old/file.jpg', 'new/file.jpg');
上記の例には、注意すべき点がいくつかあります。ファイル名ではなくディレクトリ名を指定します。デフォルトでは、
store メソッドはファイル名として一意の ID を自動的に生成します。ファイルの拡張子は、ファイルの MIME タイプをチェックすることによって決定されます。ファイルのパスとファイル名は、後続のデータベース ストレージのために store メソッドによって返されます。
Storage
putFile メソッドを使用して、上記の例と同じ効果を実現することもできます:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class UserAvatarController extends Controller{ /** * 更新用户头像. * * @param Request $request * @return Response */ public function update(Request $request) { $path = $request->file('avatar')->store('avatars'); return $path; } }
ファイル名を指定する保存されたファイルにファイル名を自動的に割り当てたくない場合は、パス、ファイル名、(オプション) を受け入れる storeAs
メソッドを使用できます。パラメータとしてディスクを使用します:$path = Storage::putFile('avatars', $request->file('avatar'));
Storage ファサードで putFileAs メソッドを使用すると、上記の例と同じファイル操作を実現できます:
$path = $request->file('avatar')->storeAs('avatars', $request->user()->id);
ディスクの指定
デフォルトでは、store
メソッドはデフォルトのディスクを使用します。別のディスクを指定する必要がある場合は、store
メソッドの 2 番目のパラメータとしてディスク名を渡すことができます:
$path = Storage::putFileAs('avatars', $request->file('avatar'), $request->user()->id);
#ファイルの可視性
Laravel 統合ファイル システムでは、「可視性」は複数のプラットフォーム上のファイルのアクセス許可を抽象化したものです。ファイルは public
または private
として宣言できます。ファイルが public
と宣言されている場合、他の人がそのファイルにアクセスできることを意味します。たとえば、S3 ドライバーを使用する場合、public
と宣言されたファイルを取得できます。
ファイルの可視性は、put
メソッドを使用して設定できます。
$path = $request->file('avatar')->store('avatars/'.$request->user()->id, 's3');
getVisibility
メソッドと setVisibility
メソッドは既存のメソッドを変更できます。ファイルのクエリと可視性の設定:
use Illuminate\Support\Facades\Storage; Storage::put('file.jpg', $contents, 'public');
ファイルの削除
delete
メソッドは A を受け取りますファイル名、またはディスク上のファイルを削除する配列形式のファイル名:
$visibility = Storage::getVisibility('file.jpg'); Storage::setVisibility('file.jpg', 'public')
必要に応じて、ディスク名を指定して、その下のファイルを削除できます:
use Illuminate\Support\Facades\Storage; Storage::delete('file.jpg'); Storage::delete(['file.jpg', 'file2.jpg']);
Directory
ディレクトリ内のすべてのファイルを取得します
files
このメソッドは、指定されたディレクトリのすべてのファイルを返します。指定したディレクトリ (サブディレクトリを含む) 内のすべてのファイルのリストを取得する場合は、allFiles
メソッドを使用できます。 directory
このメソッドは、指定されたディレクトリの下にあるすべてのディレクトリの配列を返します。さらに、
allDirectories メソッドを使用して、指定したディレクトリとそのサブディレクトリの下にあるすべてのディレクトリのリストを取得できます。 use Illuminate\Support\Facades\Storage;
Storage::disk('s3')->delete('folder_path/file_name.jpg');
Create Directory
メソッドは、ディレクトリを再帰的に作成します。
use Illuminate\Support\Facades\Storage; $files = Storage::files($directory); $files = Storage::allFiles($directory);
ディレクトリの削除
このメソッドは、指定されたディレクトリを削除します。ディレクトリとその下のすべてのファイル:
$directories = Storage::directories($directory); // 递归... $directories = Storage::allDirectories($directory);