Upload File Dengan Laravel

Created at by Aris Munandar

Pada tutorial kali ini kita akan membahas bagaimana cara upload file dengan laravel, di laravel sendiri upload file sangat mudah, karena berbasis framework yang memang tujuannya untuk mempermudah pengembangan.

Konsep tutorial upload file dengan laravel ini adalah dimana user bisa melakukan upload file beserta validasi, dimana file yang akan di upload dibatasi jenisnya sehingga tidak semua file dapat di upload ke server. Selain itu file akan disimpan di direktori yang akan di tentukan dan beberapa data dari file tersebut di simpan didatabase sehingga bisa ditampilkan di browser.

Cara Upload File Dengan Laravel

Sebelum kita memulai proses upload file sebaiknya kita buat dulu table untuk menyimpan meta data dari file tersebut, dimana mungkin kita akan membutuhkan nama file, ukuran, ekstensi file dan sebagainya.

Buatlah sebuah model dengan nama Media beserta migration (table database) dimana nantinya meta file tersebut akan disimpan didalam table media, jalankan perintah dibawah ini di terminal atau cmd anda.

php artisan make:model Media --migration

Selanjutnya pada file model migration yang ada difolder database/migrations buatlah seperti kode dibawah ini.

Schema::create('media', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('file');
    $table->string('extension');
    $table->integer('size');
    $table->string('mime');
    $table->timestamps();
});Code language: PHP (php)

Jika sudah selanjutnya jalankan migration dengan jalan menjalankan perintah dibawah ini.

php artian migrate

Dimana didalam table media kita akan menyimpan nama file, file (nama beserta extension), extension, size, dan mime type file yang di upload tersebut. Selanjutnya buatlah sebuah controller dengan perintah dibawah ini.

php artisan make:controller MediaController --resource

Dari perintah diatas maka akan tercipta sebuah file bernama MediaController yang terletak di folder App\Http\Controllers, buka file MediaController tersebut lalu tambahkan kode dibawah ini.

use Illuminate\Support\Facades\File;
use App\Models\Media;Code language: PHP (php)

Tepat dibawah kode.

use Illuminate\Http\Request;Code language: PHP (php)

Sehingga akan menjadi seperti kode dibawah ini.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use App\Models\Media;

class MediaController extends Controller
{
    ...
}Code language: HTML, XML (xml)

Selanjutnya pada method index() buatlah menjadi seperti kode dibawah ini.

public function index()
{
    $medias = Media::orderBy('created_at', 'DESC')->get();

    return view('media', compact('medias'));
}Code language: PHP (php)

Selanjutnya kita akan membuat layout, dimana layout ini digunakan sebagai file html terpisah yang menangani kerangka utama halaman upload ini. Buatlah sebuah file dengan nama layout.blade.php lalu simpan didalam folder resources/views dan masukkan kode dibawah ini.

<html>
    <head>
        <title>Upload File</title>
        <style>
            .container {
                position: relative;
                width: 80%;
                margin: 0 auto;
            }
            form .group {
                margin-bottom: 10px;
            }
            form .group label {
                display: inline-block;
                margin-bottom: 10px;
            }
            form .group input {
                border: 1px solid #cccccc;
                border-radius: 4px;
                display: block;
                width: 100%;
                padding: 10px;
            }
            form .group .error {
                display: inline-block;
                color: #ff0000;
                margin-top: 5px;
            }
            form .group button.save {
                background-color: #4169E1;
                border: 1px solid #325cdb;
                color: #ffffff;
                padding: 10px;
                cursor: pointer;
                border-radius: 4px;
            }
            
            form .group button.cancel {
                background-color: #4169E1;
                border: 1px solid #325cdb;
                color: #ffffff;
                padding: 10px;
                cursor: pointer;
                border-radius: 4px;
            }

            table {
                border: 1px solid #cccccc;
                margin-top: 10px;
            }
            table tr td,
            table tr th {
                border-left: 1px solid #cccccc;
                padding: 10px;
            }
            table tr td:first-child,
            table tr th:first-child {
                border-left: 0;
            }
            table tr td {
                border-top: 1px solid #cccccc;
            }
        </style>
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>Code language: HTML, XML (xml)

Jika sudah lalu buatlah sebuah file dengan nama media.blade.php lalu simpan didalam folder resources/views dan masukkan kode dibawah ini.

@extends('layout')
@section('content')
    @if(session()->has('message'))
        <p>{{ session()->get('message') }}</p>
    @endif
    <form action="{{ route('media.store') }}" method="POST" enctype="multipart/form-data">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <div class="group">
            <label for="file">Upload File</label>
            <input type="file" id="file" name="file">
            @if($errors->has('file'))
                <small class="error">{{ $errors->first('file') }}</small>
            @endif
        </div>
        <div class="group">
            <button class="save">Upload</button>
        </div>
    </form>
    <table width="100%" cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <th align="left" width="50%">File</th>
                <th width="25%">Download</th>
                <th width="25%">Tindakan</th>
            </tr>
        </thead>
        <tbody>
            @if($medias->count())
                @foreach($medias as $media)
                    <tr>
                        <td>
                            <div>Nama: {{ $media->name }}</div>
                            <div>File: {{ $media->file }}</div>
                            <div>Ekstensi: {{ $media->extension }}</div>
                            <div>Ukuran: {{ $media->size }}</div>
                            <div>Mime: {{ $media->mime }}</div>
                        </td>
                        <td align="center"><a href="{{ url('uploads/' . $media->file) }}" download>Download</a></td>
                        <td align="center">
                            <button form="delete-file" onclick="return confirm('Apakah anda yakin ingin menghapus file?')">Hapus</button>
                            <form action="{{ route('media.destroy', $media->id) }}" method="post" id="delete-file">
                                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                                <input type="hidden" name="_method" value="delete">
                            </form>
                        </td>
                    </tr>
                @endforeach
            @else
                <tr>
                    <td align="center" colspan="3">Belum ada file</td>
                </tr>
            @endif
        </tbody>
    </table>
@endsectionCode language: HTML, XML (xml)

Jika semuanya sudah, lalu buka file web.php yang berada didalam folder routes, lalu tambahkan kode dibawah ini.

Route::resource('media', MediaController::class);Code language: JavaScript (javascript)

Selanjutnya jalankan perintah dibawah ini di terminal atau CMD jika anda menggunakan windows.

php artisan serve

Perintah diatas agar projek laravel anda dapat diakses melalui port yang sudah ditentukan oleh artisan serve tersebut sehingga anda dapat mengakses halaman upload dengan url http://127.0.0.1:8000/media dan seharusnya di browser anda akan muncul seperti gambar dibawah ini.

upload file dengan laravel

Jika sudah sesuai dengan gambar diatas selanjutnya kita akan membuat proses upload, buka kembali file MediaController lalu pada bagian store() ubahlah menjadi kode seperti dibawah ini.

public function store(Request $request)
{
    $request->validate([
        'file' => 'required|mimes:doc,docx,xls,xlsx,pdf,jpg,jpeg,png,bmp'
    ]);

    if($request->hasFile('file')) {
        $uploadPath = public_path('uploads');

        if(!File::isDirectory($uploadPath)) {
            File::makeDirectory($uploadPath, 0755, true, true);
        }

        $file = $request->file('file');
        $explode = explode('.', $file->getClientOriginalName());
        $originalName = $explode[0];
        $extension = $file->getClientOriginalExtension();
        $rename = 'file_' . date('YmdHis') . '.' . $extension;
        $mime = $file->getClientMimeType();
        $filesize = $file->getSize();

        if($file->move($uploadPath, $rename)) {
            $media = new Media;
            $media->name = $originalName;
            $media->file = $rename;
            $media->extension = $extension;
            $media->size = $filesize;
            $media->mime = $mime;
            $media->save();

            return redirect()->back()->with('message', 'Berhasil, file telah di upload');
        }

        return redirect()->back()->with('message', 'Error, file tidak dapat di upload');
    }

    return redirect()->back()->with('message', 'Error, tidak ada file ditemukan');
}Code language: PHP (php)

Pada kode diatas terlihat proses tersebut melakukan validasi dan hanya mengijinkan beberapa jenis file saja seperti doc, docx, xls, xlsx, pdf, jpg, jpeg, png, bmp. Lalu agak kebawah sedikit kode diatas terlihat akan memeriksa folder yang sudah ditentukan tersebut, dimana apabila tidak ada folder yang dituju maka otomatis akan dibuatkan dengan permission 755.

Selanjutnya file akan di rename menjadi nama acak dengan prefix file_ akan tetapi nama asli dari file tersebut akan tetap disimpan di database, sementara file akan disimpan di folder public/uploads.

Untuk mengecek validasi apakah bekerja atau tidak, silahkan anda upload file selain file yang diijinkan diatas, maka seharusnya akan muncul pesan error seperti pada gambar dibawah ini.

upload file dengan laravel

Jika sudah sesuai, silahkan anda coba upload sebuah file dengan ekstensi yang diijinkan seperti file dokumen dan gambar, apabila berhasil maka file akan ditampilkan tepat pada tabel dibawahnya seperti pada gambar dibawah ini.

Upload file dengan laravel

Yang terakhir adalah mengaktifkan tombol hapus, tombol hapus digunakan untuk menghapus meta file di database dan file yang terdapat didalam folder public/uploads.

Buka kembali file MediaController lalu pada bagian method destroy() buatlah seperti kode dibawah ini.

public function destroy($id)
{
    $media = Media::find($id);

    if($media) {
        $file = public_path('uploads/' . $media->file);

        if(File::exists($file)) {
            File::delete($file);
        }

        $media->delete();

        return redirect()->back()->with('message', 'Berhasil, file berhasil dihapus');
    }

    return redirect()->back()->with('message', 'Error, tidak ada file ditemukan');
}Code language: PHP (php)

Pada kode diatas dimana sebelum file dan data dihapus maka kode akan memeriksa apakah file yang dituju ada atau tidak dalam folder public/uploads tersebut, jika ada maka akan dihapus beserta data yang ada didalam database.

Jika kode diatas telah selesai anda tulis maka silahkan anda klik tombol hapus, jika berhasil data akan hilang dari table dan file akan dihapus dari folder public/uploads.

Sekian tutorial ini semoga bermanfaat.

Comments

Congrats, you have the opportunity to be the first commenter on this article. Have questions or suggestions? Please leave a comment to start discussion.

Leave comment

Alamat email Anda tidak akan dipublikasikan. Required fields are marked *

news-1701

sabung ayam online

yakinjp

yakinjp

rtp yakinjp

slot thailand

yakinjp

yakinjp

yakin jp

yakinjp id

maujp

maujp

maujp

maujp

sabung ayam online

sabung ayam online

judi bola online

sabung ayam online

judi bola online

slot mahjong ways

slot mahjong

sabung ayam online

judi bola

live casino

sabung ayam online

judi bola

live casino

SGP Pools

slot mahjong

sabung ayam online

slot mahjong

SLOT THAILAND

artikel-128000741

artikel-128000742

artikel-128000743

artikel-128000744

artikel-128000745

artikel-128000746

artikel-128000747

artikel-128000748

artikel-128000749

artikel-128000750

artikel-128000751

artikel-128000752

artikel-128000753

artikel-128000754

artikel-128000755

artikel-128000756

artikel-128000757

artikel-128000758

artikel-128000759

artikel-128000760

artikel-128000761

artikel-128000762

artikel-128000763

artikel-128000764

artikel-128000765

artikel-128000766

artikel-128000767

artikel-128000768

artikel-128000769

artikel-128000770

artikel-128000771

artikel-128000772

artikel-128000773

artikel-128000774

artikel-128000775

artikel-128000776

artikel-128000777

artikel-128000778

artikel-128000779

artikel-128000780

artikel-128000781

artikel-128000782

artikel-128000783

artikel-128000784

artikel-128000785

artikel-128000786

artikel-128000787

artikel-128000788

artikel-128000789

artikel-128000790

artikel-128000791

article 138000691

article 138000692

article 138000693

article 138000694

article 138000695

article 138000696

article 138000697

article 138000698

article 138000699

article 138000700

article 138000701

article 138000702

article 138000703

article 138000704

article 138000705

article 138000706

article 138000707

article 138000708

article 138000709

article 138000710

article 138000711

article 138000712

article 138000713

article 138000714

article 138000715

article 138000716

article 138000717

article 138000718

article 138000719

article 138000720

article 138000721

article 138000722

article 138000723

article 138000724

article 138000725

article 138000726

article 138000727

article 138000728

article 138000729

article 138000730

article 138000731

article 138000732

article 138000733

article 138000734

article 138000735

article 138000736

article 138000737

article 138000738

article 138000739

article 138000740

article 138000741

article 138000742

article 138000743

article 138000744

article 138000745

article 138000746

article 138000747

article 138000748

article 138000749

article 138000750

article 138000751

article 138000752

article 138000753

article 138000754

article 138000755

article 138000706

article 138000707

article 138000708

article 138000709

article 138000710

article 138000711

article 138000712

article 138000713

article 138000714

article 138000715

article 138000716

article 138000717

article 138000718

article 138000719

article 138000720

article 138000721

article 138000722

article 138000723

article 138000724

article 138000725

article 138000726

article 138000727

article 138000728

article 138000729

article 138000730

article 138000731

article 138000732

article 138000733

article 138000734

article 138000735

article 138000736

article 138000737

article 138000738

article 138000739

article 138000740

article 138000741

article 138000742

article 138000743

article 138000744

article 138000745

article 208000456

article 208000457

article 208000458

article 208000459

article 208000460

article 208000461

article 208000462

article 208000463

article 208000464

article 208000465

article 208000466

article 208000467

article 208000468

article 208000469

article 208000470

208000446

208000447

208000448

208000449

208000450

208000451

208000452

208000453

208000454

208000455

article 228000326

article 228000327

article 228000328

article 228000329

article 228000330

article 228000331

article 228000332

article 228000333

article 228000334

article 228000335

article 228000336

article 228000337

article 228000338

article 228000339

article 228000340

article 228000341

article 228000342

article 228000343

article 228000344

article 228000345

article 228000346

article 228000347

article 228000348

article 228000349

article 228000350

article 228000351

article 228000352

article 228000353

article 228000354

article 228000355

article 228000356

article 228000357

article 228000358

article 228000359

article 228000360

article 228000361

article 228000362

article 228000363

article 228000364

article 228000365

article 228000366

article 228000367

article 228000368

article 228000369

article 228000370

article 228000371

article 228000372

article 228000373

article 228000374

article 228000375

article 238000381

article 238000382

article 238000383

article 238000384

article 238000385

article 238000386

article 238000387

article 238000388

article 238000389

article 238000390

article 238000391

article 238000392

article 238000393

article 238000394

article 238000395

article 238000396

article 238000397

article 238000398

article 238000399

article 238000400

article 238000401

article 238000402

article 238000403

article 238000404

article 238000405

article 238000406

article 238000407

article 238000408

article 238000409

article 238000410

article 238000411

article 238000412

article 238000413

article 238000414

article 238000415

article 238000416

article 238000417

article 238000418

article 238000419

article 238000420

article 238000421

article 238000422

article 238000423

article 238000424

article 238000425

article 238000426

article 238000427

article 238000428

article 238000429

article 238000430

article 238000431

article 238000432

article 238000433

article 238000434

article 238000435

article 238000436

article 238000437

article 238000438

article 238000439

article 238000440

article 238000441

article 238000442

article 238000443

article 238000444

article 238000445

article 238000446

article 238000447

article 238000448

article 238000449

article 238000450

article 238000451

article 238000452

article 238000453

article 238000454

article 238000455

article 238000456

article 238000457

article 238000458

article 238000459

article 238000460

sumbar-238000381

sumbar-238000382

sumbar-238000383

sumbar-238000384

sumbar-238000385

sumbar-238000386

sumbar-238000387

sumbar-238000388

sumbar-238000389

sumbar-238000390

sumbar-238000391

sumbar-238000392

sumbar-238000393

sumbar-238000394

sumbar-238000395

sumbar-238000396

sumbar-238000397

sumbar-238000398

sumbar-238000399

sumbar-238000400

sumbar-238000401

sumbar-238000402

sumbar-238000403

sumbar-238000404

sumbar-238000405

sumbar-238000406

sumbar-238000407

sumbar-238000408

sumbar-238000409

sumbar-238000410

news-1701