Home Mobile Manajemen File dan Upload di Laravel: Panduan Lengkap

Manajemen File dan Upload di Laravel: Panduan Lengkap

0

Pendahuluan

Manajemen file dan upload adalah fitur penting dalam banyak aplikasi web. Laravel menyediakan alat yang sangat baik untuk menangani file dan upload dengan cara yang aman dan efisien. Artikel ini akan memberikan panduan lengkap tentang cara mengelola file dan upload di Laravel, mulai dari konfigurasi dasar hingga penyimpanan di cloud.

Persiapan

Pastikan Anda memiliki lingkungan Laravel yang terpasang dan berfungsi. Anda juga perlu memastikan direktori penyimpanan sudah disetel dengan izin yang benar agar Laravel dapat menyimpan file yang diunggah.

Konfigurasi File Storage

Laravel menggunakan filesystem abstraction layer untuk mendukung berbagai driver penyimpanan, termasuk local, ftp, s3, dan rackspace.

Konfigurasi Dasar:

Buka file config/filesystems.php dan setel driver default. Untuk contoh ini, kita akan menggunakan driver local.

'default' => env('FILESYSTEM_DRIVER', 'local'),

'disks' => [
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
    ],
],

Menjalankan Perintah Storage Link:

Agar file yang diunggah ke storage/app/public dapat diakses publik, jalankan perintah berikut:

php artisan storage:link

Membuat Formulir Upload File

Membuat Route dan Controller:Buat route untuk menampilkan formulir upload dan meng-handle proses upload di routes/web.php:

Route::get('upload', 'UploadController@showUploadForm');
Route::post('upload', 'UploadController@storeUploads');

Buat controller untuk mengelola upload file:

php artisan make:controller UploadController

Menampilkan Formulir Upload:

Buka file app/Http/Controllers/UploadController.php dan tambahkan metode untuk menampilkan formulir upload:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UploadController extends Controller
{
    public function showUploadForm()
    {
        return view('upload');
    }

    public function storeUploads(Request $request)
    {
        // Validasi file
        $request->validate([
            'file' => 'required|file|mimes:jpg,png,jpeg,gif|max:2048',
        ]);

        // Menyimpan file
        if ($request->file('file')->isValid()) {
            $path = $request->file('file')->store('uploads', 'public');
            return back()->with('success', 'File berhasil diunggah!')->with('file', $path);
        }

        return back()->withErrors('File tidak valid atau gagal diunggah.');
    }
}

Membuat View untuk Formulir Upload:

Buat file view resources/views/upload.blade.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload File</title>
</head>
<body>
    @if (session('success'))
        <div>{{ session('success') }}</div>
        <div><a href="{{ asset('storage/' . session('file')) }}">Download File</a></div>
    @endif

    @if ($errors->any())
        <div>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="/upload" method="POST" enctype="multipart/form-data">
        @csrf
        <div>
            <label for="file">Choose file to upload:</label>
            <input type="file" id="file" name="file">
        </div>
        <div>
            <button type="submit">Upload</button>
        </div>
    </form>
</body>
</html>

Menyimpan File di Cloud Storage

Untuk menyimpan file di cloud storage seperti Amazon S3, Anda perlu mengonfigurasi driver s3 di file .env:

FILESYSTEM_DRIVER=s3
AWS_ACCESS_KEY_ID=your-access-key-id
AWS_SECRET_ACCESS_KEY=your-secret-access-key
AWS_DEFAULT_REGION=your-region
AWS_BUCKET=your-bucket-name
AWS_URL=your-url
AWS_ENDPOINT=your-endpoint

Kemudian, ubah metode storeUploads di UploadController untuk menggunakan disk s3:

public function storeUploads(Request $request)
{
    $request->validate([
        'file' => 'required|file|mimes:jpg,png,jpeg,gif|max:2048',
    ]);

    if ($request->file('file')->isValid()) {
        $path = $request->file('file')->store('uploads', 's3');
        return back()->with('success', 'File berhasil diunggah!')->with('file', $path);
    }

    return back()->withErrors('File tidak valid atau gagal diunggah.');
}

Mengakses File yang Diunggah

Untuk mengakses file yang diunggah, Anda dapat menggunakan helper asset untuk file lokal atau URL S3 untuk file di cloud:

<a href="{{ asset('storage/' . session('file')) }}">Download File</a>

Untuk S3:

<a href="{{ Storage::disk('s3')->url(session('file')) }}">Download File</a>

Kesimpulan

Laravel memudahkan manajemen file dan upload dengan menggunakan filesystem abstraction layer. Dengan mengikuti panduan ini, Anda dapat dengan mudah mengelola file dan upload di aplikasi Laravel Anda, baik menggunakan penyimpanan lokal maupun cloud. Menjaga keamanan dan validasi file adalah kunci untuk memastikan aplikasi Anda berjalan dengan baik dan aman.