项目作者: illuminatech

项目描述 :
'multipart/form-data' parser middleware for Laravel
高级语言: PHP
项目地址: git://github.com/illuminatech/multipart-middleware.git
创建时间: 2019-01-30T16:00:16Z
项目社区:https://github.com/illuminatech/multipart-middleware

开源协议:Other

下载






Multipart request parser middleware for Laravel




This extension provides ability to parse ‘multipart/form-data’ HTTP requests for any request method, including ‘PUT’, ‘PATCH’ and so on.

For license information check the LICENSE-file.

Latest Stable Version
Total Downloads
Build Status

Installation

The preferred way to install this extension is through composer.

Either run

  1. php composer.phar require --prefer-dist illuminatech/multipart-middleware

or add

  1. "illuminatech/multipart-middleware": "*"

to the require section of your composer.json.

Usage

This extension provides ability to parse ‘multipart/form-data’ HTTP requests for any request method, including ‘PUT’,
‘PATCH’ and so on without necessity to spoof it using ‘_method’ parameter.

This allows REST client, interacting with your application, to use modern strict flow involving file uploading.

It is provided via \Illuminatech\MultipartMiddleware\MultipartFormDataParser middleware.
This middleware should be applied to your HTTP kernel prior to any other middleware, which operates input data,
thus you will have to manually set the core middleware in your web application bootstrap.
For example:

  1. <?php
  2. use Illuminate\Foundation\Application;
  3. use Illuminate\Foundation\Configuration\Exceptions;
  4. use Illuminate\Foundation\Configuration\Middleware;
  5. $app = Application::configure(basePath: dirname(__DIR__))
  6. ->withRouting(
  7. // ...
  8. )
  9. ->withMiddleware(function (Middleware $middleware) {
  10. // we need to tap inside global middleware sequence in order to set up 'multipart/form-data' parser correctly:
  11. $middleware->use([
  12. \Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class,
  13. // \Illuminate\Http\Middleware\TrustHosts::class,
  14. \Illuminate\Http\Middleware\TrustProxies::class,
  15. \Illuminate\Http\Middleware\HandleCors::class,
  16. \Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
  17. \Illuminate\Http\Middleware\ValidatePostSize::class,
  18. \Illuminatech\MultipartMiddleware\MultipartFormDataParser::class, // parse multipart request, before operating input
  19. \Illuminate\Foundation\Http\Middleware\TrimStrings::class,
  20. \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
  21. ]);
  22. // ...
  23. })
  24. // ...
  25. ->create();
  26. return $app;

\Illuminatech\MultipartMiddleware\MultipartFormDataParser will automatically parse any HTTP request with ‘multipart/form-data’
content type, skipping only requests performed with ‘POST’ method as they are already parsed by PHP automatically.

" class="reference-link">Enforcing parsing

By default \Illuminatech\MultipartMiddleware\MultipartFormDataParser middleware skips requests performed via ‘POST’ method
and the ones already containing uploaded files. This is done for performance reason, since PHP parses ‘multipart/form-data’
for POST requests automatically. However, it is not always a desirable behavior. You may need to enforce parsing of the
POST requests in case you creating request instances manually in non standard way. For example, in case you are building
ReactPHP application. This can be achieved using force middleware parameter. For example:

  1. <?php
  2. namespace App\Http;
  3. use Illuminate\Foundation\Http\Kernel as HttpKernel;
  4. class Kernel extends HttpKernel
  5. {
  6. protected $middleware = [
  7. // ..
  8. \Illuminatech\MultipartMiddleware\MultipartFormDataParser::class.':true', // enforce multipart request parsing
  9. // ...
  10. ];
  11. // ...
  12. }

" class="reference-link">Restrictions and drawbacks

  • Although parser populates temporary file name for the uploaded file instance, such temporary file will
    not be recognized by PHP as uploaded one. Thus functions like is_uploaded_file() and move_uploaded_file() will
    fail on it. Thus all created uploaded file instances are marked as test ones.

  • All created temporary files will be automatically deleted, once middleware instance is destroyed.
    Thus any attempt to read the parsed uploaded file outside request handler scope will fail.

  • This extension may cause PHP memory overflow error in case of processing large files and large request body.
    Make sure to restrict maximum request body size to avoid such problem.