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 ミドルウェア: ファイルのアップロードおよびダウンロード機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。