【问题标题】:Detect Image upload on Laravel through middleware通过中间件检测 Laravel 上的图像上传
【发布时间】:2018-05-04 09:01:55
【问题描述】:

我希望能够在Laravel 上的全局middleware 中检测图像。

我的目标是制作middleware,检测当前是否有图片正在上传,然后检测其大小并进行操作。

这可能吗?

我继承了一个项目,需要操作每个全局图像upload,但是有太多单独的脚本要单独更改它们,我需要某种方法来全局更改它们。

我愿意接受建议!

【问题讨论】:

标签: php laravel-5 middleware


【解决方案1】:
<?php

namespace App\Http\Middleware;

use Closure;
use Symfony\Component\HttpFoundation\Response;

class ImageInterceptorMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        foreach (array_flatten($request->files->all()) as $file) {
            $size = $file->getClientSize(); // size in bytes!

            $onemb = pow(1024, 2); // https://stackoverflow.com/a/2510446/6056864

            if ($size > $onemb) {
                abort(Response::HTTP_UNPROCESSABLE_ENTITY);
            }
        }

        return $next($request);
    }
}

【讨论】:

  • 我不想在中间件中实际处理上传,我只想在继续之前检查它的大小。为此,我是否可以只使用 top 函数,如果大小合适则返回下一个请求,以允许发出请求的任何控制器完成上传?
  • @S_R 我已经更新了中间件来检查文件大小
  • 注意:它会单独检查每个文件的大小,如果其中任何一个太大,整个请求都会被阻塞,而不仅仅是单个文件。
  • 这似乎是在检查 php.ini 文件的允许文件大小,而不是代码中指定的大小。它返回The file "picture.jpg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB).
  • @S_R 不,您似乎已将 php 配置为仅接受最大 2 mb 的文件,只有低于它的文件才会发送到此代码。 (您必须增加默认上传大小)
猜你喜欢
  • 2016-05-20
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2019-11-06
  • 1970-01-01
相关资源
最近更新 更多