Blog FQSoft

Just Simple Code Documentation

Laravel

Laravel Upload JPG Convert WEBP dengan Path Dinamis Antara Local dan Hosting

Faiq Himmah 28 August 2025

Kendala ini muncul saat upload file berformat JPG. Pada proses upload terdapat proses convert ke WEBP. dimana kendala ini muncul karena proses upload tidak langsung disimpan tapi diconvert dulu menjadi .webp sehingga proses penyimpannanya menggunakan imagewebp() dengan parameter tujuan path ditentukan secara manual.

Awalnya saya menggunakan kode ini untuk menentukan path. dan path ini tidak salah ketika diterapkan di default upload laravel

$destinationPath = public_path().'/images/produk');

Path diatas saat dijalankan di local tidak ada masalah, image terupload sesuai tujuan. namun saat dideploy di share hosting. dimana saya meletakkan folder laravel di root sedangankan isi folder public saya letakkan di folder public_html. sehingga saat proses upload image di hosting gambar .webp tersimpan di folder public bukan di public_html

Dan soslusi yang tepat adalah membuat path upload yang dinamis sehingga laravel bisa menentukan path saat di local dan saat di hosting. maka sebagai jembatan komunikasi saya manfaatkan file .env saya menambahkan key APP_PUBLIC_PATH saat di local bernilai public

APP_PUBLIC_PATH=public 

sedangkan di hosting

APP_PUBLIC_PATH=../public_html 

sehingga untuk menentukan path tujuan seperti ini

$destinationPath = base_path(env('APP_PUBLIC_PATH','public').'/images/produk');

Keterangan:

base_path() : Merujuk pada lokasi root folder laravel

env() : function untuk mengambil value berdasar key yang ada di file .env

parameter 'public' : yaitu path default. Jadi ketika key 'APP_PUBLIC_PATH' tidak ditemukan maka otomatis function env() akan mengembalikan nilai 'public'

contoh implementasi lengkapnya

private function uploadProduk($files){

        $list_foto = "";

        // Penentuan path tujuan yang dinamis
        $destinationPath = base_path(env('APP_PUBLIC_PATH','public').'/images/textile/produk');
            if (!file_exists($destinationPath)) {
                mkdir($destinationPath, 0755, true);
            }

        foreach ($files as $file) {
            // Nama file tanpa ekstensi
            $originalName = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
            $filename = time() . '_' . Str::slug($originalName) . '.webp';

            // Ambil path sementara dan MIME
            $tempPath = $file->getPathname();
            $mime = $file->getMimeType();

            // Buat image resource sesuai tipe
            switch ($mime) {
                case 'image/jpeg':
                    $image = imagecreatefromjpeg($tempPath);
                    break;
                case 'image/png':
                    $image = imagecreatefrompng($tempPath);
                    imagepalettetotruecolor($image); // konversi ke true color
                    imagealphablending($image, true);
                    imagesavealpha($image, true);
                    break;
                default:
                    // Skip jika bukan JPEG/PNG
                    continue 2;
            }

            // Simpan sebagai WebP
            imagewebp($image, $destinationPath . '/' . $filename, 80); // kualitas 80%
            imagedestroy($image);

            $list_foto .= $filename . ',';
        }


        return $list_foto;
    }
laravel upload jpg webp path