ホームページ >バックエンド開発 >PHPチュートリアル >Laravelでファイルをアップロードする
Laravel では、美しい統合 API を使用してファイルをアップロードし、ローカル ディスクから S3 などのリモート オブジェクト ストレージまで、さまざまな種類のストレージ システムと対話できます。
他の多くの Laravel コンポーネントと同様に、Storage Facade: Illuminate/Support/Facades/Storage を通じてアプリケーション ファイルシステムと対話できます
このクラスを使用すると、共通インターフェイスを実装するディスクと呼ばれるストレージ ドライバーにアクセスできます。そのため、アプリケーション コードに触れることなく、基盤となる物理ストレージを変更できます。
これにより、ローカル ファイル システム、FTP、または AWS S3 から同じ方法で読み書きできるだけでなく、ローカル環境で開発しているか本番環境でアプリケーションを実行しているかに応じて、異なるオプションを選択することもできます。 .
カスタム ファサードの構築方法を学びたい場合は、以下の記事をお読みください:
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
さらに技術的な記事については、Linkedin または X で私をフォローしてください。
Laravel は、config/filesystems.php 設定ファイルで設定された「ディスク」を介してストレージへのアクセスを管理します。各ディスクには識別名と、アプリケーションに接続されるストレージ システムの実際のタイプを定義できるドライバーがあります。
ドライバーに応じて、他のオプションも構成可能になります。たとえば、ローカル ドライバーを含むディスクでは、対応する実際のローカル ディレクトリを示すために root パラメーターを設定する必要があります。 s3 ドライバーを使用する場合は、AWS S3 または S3 互換システムにアクセスするために、さまざまなキー、シークレット、リージョン、バケットを設定する必要があります。
デフォルトで構成されているさまざまなディスクの中で、public という名前のディスクが最も興味深いものの 1 つです。このディスクは、Laravel アプリケーションからパブリックにアクセスできるようにする必要があるファイルをホストするように設計されています。
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
上のスニペットでわかるように、ディスクにはドライバーとしてローカルがあり、ルートはプライベートストレージ/app/public ディレクトリです。
プライベート ディレクトリにパブリックにアクセスするにはどうすればよいですか?
パブリックディスクが動作できるようにするには、Laravelパブリックフォルダーをディスク内に構成されたプライベートルートに接続するためのシンボリックリンクを作成する必要があります。
幸いなことに、Laravel にはこのセットアップを自動的に行う組み込みコマンドがあります。
php artisan storage:link
ローカル環境を含むマシンに Laravel アプリケーションを初めてインストールするときに、このコマンドを実行する必要があります。
シンボリックリンクを作成すると、Laravel は storage/app/public フォルダーを public/storage フォルダーに接続します。つまり、公開ページにファイルを表示したい場合は、次のようにすることができます:
{{ asset('storage/file.txt') }}
ファイルは物理的に storage/app/public に保存されますが、シンボリックリンクのおかげで、パス yourdomain.com/storage/filename.ext からアクセスできます
これが必要なのは、パブリック フォルダーは通常 Web サーバー (Apache、NGINX など) のルートであり、Web サイトまたはアプリが指すことができる唯一のパスであるためです。シンボリックリンクにより、ストレージ フォルダーの一部が外部から利用できるようになります。
ファイルのアップロードを許可する HTML フォームの例を次に示します:
<form action="/avatar" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="avatar"/> <button type="submit"></button> </form>
このファイルをディスクに保存するのは非常に簡単です。リクエスト オブジェクトには、ファイル タイプのフォーム フィールドから送信されたアイテムを取得できる file メソッドがあります。フロントエンドから送信されたファイルにアクセスするために、入力フィールドの名前を file メソッドに渡すことでアイテムを取得できます。
namespace App/Http/Controllers; use App/Http/Resources/UserResource; class AvatarController extends Controller { public function update(Request $request) { $path = $request->file('avatar')->store("avatars/{$request->user()->id}"); $request->user()->update(['avatar' => $path]); return new UserResource($request->user()); } }
store メソッドはリクエストからファイルを取得し、ファイル名の一意の ID を生成してディスクに保存します。一方、ファイル拡張子はリクエストで指定された MIME タイプから取得されます。保存されたファイルのパスが返されるため、保存または使用できます。
ストアは config/filesystem.php で設定されたデフォルトのディスクを使用しますが、最終的にはその場で別のディスクを指定できます。
$path = $request->file('avatar') ->store("avatars/{$request->user()->id}", 's3');
ストレージ ファサードを直接使用しても同じ結果が得られます。
$path = Storage::disk('s3') ->putFile("avatars/{$request->user()->id}", $request->file('avatar'));
個人的には、ステートメントがより明確になるため、ストレージ ファサードを使用することを好みます。
さらに技術的な記事については、Linkedin または X で私をフォローしてください。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバーレベルで何もインストールする必要はありません。Laravel パッケージ をインストールするだけで準備完了です。
HTTP モニタリング、データベース クエリに関する洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
以上がLaravelでファイルをアップロードするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。