illuminatech/multipart-middleware

'multipart/form-data' 解析中间件用于Laravel

1.1.6 2024-03-25 10:36 UTC

This package is auto-updated.

Last update: 2024-08-25 11:31:17 UTC


README

Laravel的多部分请求解析中间件


此扩展提供了解析任何请求方法(包括'PUT'、'PATCH'等)的'multipart/form-data' HTTP请求的能力。

有关许可证信息,请查看LICENSE文件。

Latest Stable Version Total Downloads Build Status

安装

安装此扩展的首选方式是通过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内存溢出错误。请确保限制最大请求体大小,以避免此类问题。