Search code examples
phplaravel-5middleware

Detect Image upload on Laravel through middleware


I'm looking at being able to have a image detect in a global middleware on Laravel.

My goal is to make the middleware, detect if there is currently an image being uploaded, and then detect its size and manipulate it.

Is this possible?

I've inherited a project, and need to manipulate every global image upload, but there are far too many individual scripts to change them all separately, I need some sort of way to change them all globally.

I'm open to suggestions!


Solution

  • <?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);
        }
    }