illuminatech / multipart-middleware
'multipart/form-data' 解析中间件用于Laravel
Requires
- illuminate/http: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- phpunit/phpunit: ^7.5 || ^8.0 || ^9.3 || ^10.5
README
Laravel的多部分请求解析中间件
此扩展提供了解析任何请求方法(包括'PUT'、'PATCH'等)的'multipart/form-data' HTTP请求的能力。
有关许可证信息,请查看LICENSE文件。
安装
安装此扩展的首选方式是通过composer。
运行
php composer.phar require --prefer-dist illuminatech/multipart-middleware
或添加
"illuminatech/multipart-middleware": "*"
到您的composer.json文件的要求部分。
用法
此扩展提供了解析任何请求方法(包括'PUT'、'PATCH'等)的'multipart/form-data' HTTP请求的能力,无需使用'_method'参数进行欺骗。
这允许与您的应用程序交互的REST客户端使用现代严格流程,涉及文件上传。
它通过\Illuminatech\MultipartMiddleware\MultipartFormDataParser
中间件提供。此中间件应在任何其他操作输入数据的中间件之前应用于您的HTTP内核。例如
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ \App\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Illuminatech\MultipartMiddleware\MultipartFormDataParser::class, // parse multipart request, before operating input \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, // ... ]; // ... }
\Illuminatech\MultipartMiddleware\MultipartFormDataParser
将自动解析任何带有'multipart/form-data'内容类型的HTTP请求,仅跳过使用'POST'方法执行的请求,因为它们已经被PHP自动解析。
强制解析
默认情况下,\Illuminatech\MultipartMiddleware\MultipartFormDataParser
中间件会跳过使用'POST'方法执行的请求和已包含上传文件的请求。这是出于性能原因,因为PHP会自动解析POST请求的'multipart/form-data'。但是,这种行为并不总是期望的。如果您以非标准方式手动创建请求实例,可能需要强制解析POST请求。例如,如果您正在构建ReactPHP应用程序。这可以通过使用force
中间件参数来实现。例如
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ // .. \Illuminatech\MultipartMiddleware\MultipartFormDataParser::class.':true', // enforce multipart request parsing // ... ]; // ... }
限制和缺点
-
尽管解析器为上传文件实例填充了临时文件名,但这种临时文件不会被PHP识别为上传文件。因此,像
is_uploaded_file()
和move_uploaded_file()
这样的函数会失败。因此,所有创建的上传文件实例都被标记为测试实例。 -
一旦中间件实例被销毁,所有创建的临时文件将自动删除。因此,在请求处理程序作用域之外读取已解析的上传文件将失败。
-
在处理大文件和大请求体时,此扩展可能会引起PHP内存溢出错误。请确保限制最大请求体大小,以避免此类问题。