CakePHP ミドルウェア: ファイルのアップロードおよびダウンロード機能の実装
インターネットの発展に伴い、ファイルのアップロードおよびダウンロード機能はますます一般的になってきています。 Web アプリケーションを開発する場合、ファイルのアップロードとダウンロードを実装する必要があることがよくあります。 CakePHP フレームワークを使用してアプリケーションを開発する場合、ミドルウェアは、コードを簡素化し、ファイルのアップロードおよびダウンロード機能を実装するのに役立つ非常に便利なツールです。次に、CakePHP ミドルウェアを使用してファイルのアップロードとダウンロード機能を実装する方法を紹介します。
まず、新しいミドルウェア クラスを作成し、FileHandlerMiddleware.php
という名前のファイルを src/Middleware
ディレクトリに作成し、次のコードを追加する必要があります。 ##
<?php namespace AppMiddleware; use CakeUtilityText; use CakeHttpResponse; use PsrHttpMessageResponseInterface; use PsrHttpMessageServerRequestInterface; use CakeHttpServerRequest; class FileHandlerMiddleware { public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next) { $path = WWW_ROOT . 'uploads' . DS; // 处理文件上传 if ($request->getMethod() === 'POST' && $request->getData('file')) { $file = $request->getData('file'); $fileName = Text::uuid() . '-' . $file->getClientFilename(); $file->moveTo($path . $fileName); $response = new Response(); $response = $response->withAddedHeader('Content-Type', 'application/json'); $response->getBody()->write(json_encode(['success' => true, 'message' => '文件上传成功!'])); return $response; } // 处理文件下载 $params = $request->getAttribute('params'); if (isset($params['file'])) { $fileName = $params['file']; $filePath = $path . $fileName; if (file_exists($filePath)) { $stream = fopen($filePath, 'r'); $response = new Response(); $response = $response->withAddedHeader('Content-Disposition', 'attachment; filename="' . $fileName . '"'); $response->withBody(new SlimHttpStream($stream)); return $response; } } return $next($request, $response); } }上記のコードの
FileHandlerMiddleware は、ファイルのアップロードとダウンロードのためのミドルウェア クラスです。
POST リクエストを受信し、そのリクエストに
file という名前のデータが含まれている場合、ミドルウェアはファイルを
uploads フォルダーに保存し、成功の JSON 応答を返します。
file パラメータを含むリクエストを受信すると、ミドルウェアはファイル名に応じたファイルの内容を応答として返します。
src/Application.php ファイルを開き、
Application クラスの
middleware メソッドにミドルウェアを登録します。コードは次のとおりです。
use AppMiddlewareFileHandlerMiddleware; // ... public function middleware($middlewareQueue) { $middlewareQueue ->add(new FileHandlerMiddleware()) // 其它中间件 // ... ->add(new ErrorHandlerMiddleware(Configure::read('Error'))) ->add(new AssetMiddleware()) ->add(new RoutingMiddleware($this)); return $middlewareQueue; }上記のコードでは、
add メソッドを使用して、
FileHandlerMiddleware ミドルウェアをミドルウェア キューに登録します。ミドルウェア キューを使用して複数のミドルウェアを順番に処理し、コントローラー アクションを実行する前に登録されたミドルウェアを実行します。
public function upload() { // 显示上传表单 }次に、次のフォーム コードを対応するビュー ファイルに追加します。
<form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">上传</button> </form>上記のコードでは、フォームを作成します。ファイルアップロードフィールドと送信ボタン。フォームの
enctype 属性は、ファイルのアップロードに必要な
multipart/form-data に設定されます。
/download/{file_name}たとえば、
example.jpg という名前のファイルをダウンロードするには、次のコマンドを使用できます。 URL:
/download/example.jpgファイルはダウンロードされた形式でユーザーに返されます。 概要: この記事では、CakePHP ミドルウェアを使用してファイルのアップロードおよびダウンロード機能を実装する方法を紹介します。新しいミドルウェア クラスを作成することで、ファイルのアップロードおよびダウンロードのリクエストを処理し、適切な応答を返すことができます。ミドルウェアは、コードを簡素化し、アプリケーションの機能を強化するのに役立ちます。この記事が CakePHP ミドルウェアの理解と使用に役立つことを願っています。
以上がCakePHP ミドルウェア: ファイルのアップロードおよびダウンロード機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。