SunnyBoy's avatar

Intervention Image with Laravel and FilePond

Hi All,

I am trying to upload image with filepond (it works), but i want to resize my images before uploading.

This works without FilePond

$file = Image::make($request->file('image'))
    ->fit(700, 467, function ($constraint) {
        $constraint->aspectRatio();
    });

But the same fails in conjunction with FilePond

Here is my UploadController:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\TemporaryFile;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;

class UploadController extends Controller
{
    public function upload(Request $request)
    {
        if ($request->hasFile('image')) {

//            $file = Image::make($request->file('image'))
//                ->fit(700, 467, function ($constraint) {
//                    $constraint->aspectRatio();
//                })
//                ->encode('jpg');

            $file = $request->file('image');

            // Rename file with *.jpg extension
            $filename = time() . '.jpg';

            // Create unique folder
            $folder = uniqid() . '-' . time();

            // Save the file to unique tmp folder with new filename
            $file->storeAs('/public/images/tmp/' . $folder, $filename);

            // Store the folder and filename to database
            TemporaryFile::create([
                'folder' => $folder,
                'filename' => $filename,
            ]);

            // Return the tmp folder name
            return $folder;
        }
        return '';
    }
}

The code works except it doesn't resize the image.

0 likes
2 replies
SunnyBoy's avatar
SunnyBoy
OP
Best Answer
Level 5

Finally after a fresh start i was able to fix the issue... Finally its working! Phew 😅

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\TemporaryFile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class UploadController extends Controller
{
    public function upload(Request $request)
    {
        $this->validate($request, [
            'image' => 'image|mimes:jpg,jpeg,png,svg,gif|max:2048',
        ]);

        // Get file from request
        $image = $request->file('image');
        // Resize image
        $resize = Image::make($image)->fit(700, 467, function ($constraint) {
            $constraint->aspectRatio();
        })->encode('jpg');

        // Create unique folder
        $folder = uniqid() . '-' . time();
        
        // Rename image file
        $filename = time() . '.jpg';
        
        // Put image to storage
        $save = Storage::put("public/images/tmp/{$folder}/{$filename}", $resize->__toString());

        if ($save) {
            // Store the folder and filename to database
            TemporaryFile::create([
                'folder' => $folder,
                'filename' => $filename,
            ]);
            return $folder;
        }
        return '';
    }
}

Please or to participate in this conversation.