Skip to content
'multipart/form-data' parser middleware for Laravel
PHP
Branch: master
Clone or download
Latest commit 9e0c7d1 Jul 2, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Create FUNDING.yml Jul 2, 2019
src Fixed `MultipartFormDataParser::createUploadedFile()` now creates `\I… Apr 5, 2019
tests code reorganized Feb 1, 2019
.gitattributes github templates added Jul 1, 2019
.gitignore Initial commit Jan 30, 2019
.travis.yml Travis setup update Feb 1, 2019
CHANGELOG.md release 1.0.1 Apr 5, 2019
LICENSE.md fix licence Jul 1, 2019
README.md docs update Feb 1, 2019
composer.json
phpunit.xml.dist Initial commit Jan 30, 2019

README.md

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

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

or add

"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. For example:

<?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]] 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.

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:

<?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
        // ...
    ];
    // ...
}

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.

You can’t perform that action at this time.