#27-Laravel Upload Multiple File

Pada dasarnya, ada tiga hal yang harus disesuaikan agar fitur aplikasi yang dibuat mendukung unggah banyak berkas sekaligus.

  1. Mengubah bentuk form menjadi array.
  2. Memvalidasi berkas satu persatu.
  3. Memroses data berkas yang berbentuk array untuk diunggah satu persatu dalam perulangan (looping) dan menyimpannya ke dalam database table uploads.

Persiapan

  • Buat Project Laravel
  • Buat Database
  • Setting Database

Menyiapkan Routes

Route::get('/multiupload', 'MultiuploadController@index');
Route::post('/multiupload/proccess', 'MultiuploadController@proccess'); 

Pertama kita membuat route dengan nama /multiupload, agar menjalankan method index() pada controller MultiuploadController.php. kemudian route satunya lagi saya membuat dengan nama /multiupload/proccess. dan route ini menjalankan method proccess() dalam controller MultiuploadController.php.

Membuat Model Upload & Migrate Table uploads

Diawali dengan membuat Model + Migrate table dengan perintah php artisan

  • Make Model + Migrate
php artisan make:model Upload -m

Edit file database/migrations/xxx_create_uploads_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUploadsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('uploads', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('filename');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('uploads');
    }
}

php artisan migrate

Akan ada table baru pada database bernama table uploads, berikut schema table uploads

Schema table uploads

multiupload.blade.php

Membuat Controller

Selanjutnya buat sebuah controller baru dengan nama UploadController.php. karena sesuai dengan controller yang kita tuliskan pada route di atas tadi.

Teman-teman bisa membuat controller dengan perintah php artisan.

php artisan make:controller MultiuploadController

Sekarang buka file controller tersebut. karena kita akan mulai membuat upload file dengan laravel. dan buat method upload() dan method process() seperti berikut.

app/Http/Controllers/MultiuploadController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Upload;

class MultiuploadController extends Controller
{
    public function index(){
		return view('multiupload',['title'=>'#27-Laravel MultiUpload File']);
	}

	public function proccess(Request $request){
		$this->validate($request, [
			'files.*' => 'required|file|max:2000',
        ]);
        $files = [];
        foreach ($request->file('files') as $file) {
            if ($file->isValid()) {
                $file->move("multiuploads",$file->getClientOriginalName());
                // save information to variable
                // next will be saved to database
                $files[] = [
                    'filename' => $file->getClientOriginalName(),
                ];
            }
        }
        Upload::insert($files);
        return redirect()
            ->back()
            ->withSuccess(sprintf('Total %s berkas berhasil diunggah.', count($files)));
    }
}

Membuat Template Form

Perhatikan, pada method upload() kita menampilkan view upload.blade.php, karena pada view upload.blade.php ini kita akan membuat form penginputan file yang ingin di upload.

Buat sebuah view baru dengan nama multiupload.blade.php. pada view ini kita akan membuat form upload.

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>{{$title}}</title>
        <link rel="stylesheet" type="text/css" href="{{ asset('/css/app.css') }}">
    </head>
    <body>
        <div class="container">
            <div class="card mt-5">
                <div class="card-header text-center">
                    {{$title}}
                </div>
                <div class="card-body">
                    @if ($message = Session::get('success'))
                        <div class="alert alert-success">
                            <p>{{ $message }}</p>
                        </div>
                    @endif
                    <br/>
                    <br/>
                    <form action="/multiupload/proccess" method="POST" enctype="multipart/form-data">
                        {{ csrf_field() }}

                        <div class="form-group">
                            <b>File Gambar 1</b><br/>
                            <input type="file" name="files[]">
                        </div>
                        <div class="form-group">
                            <b>File Gambar 2</b><br/>
                            <input type="file" name="files[]">
                        </div>
                        @if($errors->has('files'))
                            <div class="text-danger">
                                {{ $errors->first('files')}}
                            </div>
                        @endif

                        <input type="submit" value="Upload" class="btn btn-primary">
                    </form>
                </div>
            </div>
        </div>
    </body>
</html>

Jalankan Program

php artisan serve

Buka web browser anda buka address http://localhost:8000/multiupload

Form Multiupload
Setelah Submit

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>