laravel upload

Upload dan Download File Laravel

upload file laravel

Laravel 6.2 upload dan download file.Kali ini kita akan belajar untuk mengupload dan mendownload file pada laravel 6.2.Sebelumnya kalian harus telah menginstall laravelnya pastinya 😀

1. Membuat Database Migration Laravel

Untuk melakukan laravel upload kalian harus membuat struktur databasenya yaitu dengan migration.Kalian harus selalu standby dengan CMD/terminal.Ketik di bawah ini untuk membuat Model + migration.

php artisan make:model File -m

maka akan menghasilkan 2 buah file.yang pertama adalah File.php dan yang kedua 2019_02_14_064707_create_files_table.php. untuk File.php terletak di dalam folder App , sedangkan file yang ke dua terletak di database->migration.di baca ya caption gambarnya 😀

Buat database melalui migration

Pertama kita akan membuat atrribut apa saja yang ada dalam table files.

public function up()
    {
        Schema::create('files', function (Blueprint $table) {
            $table->increments('id_file'); // auto increment
            $table->string('nama_file');
            $table->string('ukuran_file');
            $table->timestamps();
        });
    }
deklarasi attribut

setelah kita mendeklarasikan attribut maka tinggal menajalankan

php artisan migrate
lanjut

Setting attribut pada model File

Tujuan dari pembuatan Model database adalah kita membuat sebuah representasi/tiruan dari table kita yang ada di mysql.


namespace App;

use Illuminate\Database\Eloquent\Model;

class File extends Model
{
    protected $table = 'files'; // kita beri tahu bahwa nama databasenya files
    public $timestamps = false; // untuk mematikan fitur timestamp bawaan laravel karena kita tidak memerlukannya
    protected $primaryKey = 'id_file'; // memberi tahu primary key table
}
Setting attribu model migration

Membuat View

Buatlah sebuah view kita beri nama dashboard.blade.php,serta tambahkan css & js.

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link
            rel="stylesheet"
            href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
            integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
            crossorigin="anonymous">
        <script
            src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
            integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
            crossorigin="anonymous"></script>
        <title>Ilmusaya</title>
    </head>
    <body>
        <div class="container">
            <div class="row">
                @if (session('sukses'))
                <div
                    class="alert alert-success alert-dismissable custom-success-box"
                    role="alert">
                    <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
                    {{ session('sukses') }}
                </div>
                @endif
                <div class="col-md-12 col-xl-12 col-sm-12">
                    <div class="card">
                        <div class="card-header">
                            <h4>
                                File Upload</h4>
                        </div>
                        <div class="card-body">
{{-- action di arahkan ke funtion store pada controller home --}}
   <form action="{{ route('home.store') }}" method="POST" enctype="multipart/form-data">
   @csrf
      <div class="form-group row">
         <label for="Upload File">Upload File</label>
       <input type="file" name="file">
   <button type="submit" class="btn btn-info">Upload</button>
  </div>

                 </form>
                        </div>
                    </div>
                    <div class="card">
                        <div class="card-header">
                            <h3>List File</h3>
                        </div>
                        <div class="card-body">
                            <div class="table">
                                <table>
                                    <thead>
                                        <tr>
                                            <th>Nomer</th>
                                            <th>Nama File</th>
                                        </tr>
                                    </thead>
                                    <tbody>
             {{-- gunakan query builder di dalam blade template --}}
 @php $datafile = DB::table('files')->get(); @endphp

                                         @foreach ($datafile as $datafiles)
                                        <tr>
                                            <td>{{ $datafiles->id_file }}</td>
                                            <td>

{{-- mengarahkan url ke folder storage/upload melalui storage:link --}}
 <a href="{{ url('storage/uploads'.'/'.$datafiles->nama_file) }}">
{{ $datafiles->nama_file }}</a>
                                            </td>
                                        </tr>
                                        @endforeach
                                    </tbody>
                                </table>

                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
        {{-- ini adalah script js dari bootstrap --}}
        <script
            src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
            integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
            crossorigin="anonymous"></script>
        <script
            src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
            integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
            crossorigin="anonymous"></script>
    </body>
</html>

Membuat Controller

Kita akan membuat resource controllernya terlebih dahulu.Ketik ini di CMD/terminal

 php artisan make:controller FileController --resource 


Dengan menambahkan opsi –resource, maka controller yang telah dibentuk (secara default), diisi dengan delapan method yang digunakan untuk operasi CRUD (Create, Read, Update, Delete).

https://www.laravel.web.id/2017/10/17/memanfaatkan-fitur-controller-resource-laravel/
Http/Controllers/FileController.php

Setelah Resource Controller di buat maka jangan lupa di daftarkan ke web.php yang terletak di dalam folder routes.Kita beri nama upload dengan controller bernama FileController

setelah itu kita check arah routingnya,ketikan :

php artisan route:list

daftar routing

Kemudian kita akan membuat sebuah validate untuk memvalidasi request,langsung menuju function store.

public function store(Request $request){
        $request->validate([
            'fileupload'=>'required',
        ]); // memvalidasi input request dengan name="fileupload"
 foreach ($request->file('fileupload') as $key => $value) {
    $imagename = time(). $key .'.'.$value->getClientOriginalExtension(); // memberi         nama file sesuai dengan nama originalnya
    $value->move(public_path('files'),$imagename); // menyimpan pada folder files.
        }
        return response()->json(['sukses','File berhasil di upload']);
    }

symbolic link ini bertujuan untuk membuat link folder storage ke dalam folder public.

 php artisan storage:link 

pada dasar folder yang hanya boleh di akses oleh pengguna hanya di dalam folder public saja,maka dari itu kita membuat link dari folder storage untuk di arahkan ke dalam folder public.

https://laravel.com/docs/6.x/filesystem#introduction

Newsletter Updates

Enter your email address below to subscribe to our newsletter

Leave a Reply