Some text some message..
Some text some message..
Some text some message..
Some text some message..
  • Beranda
  • »
  • Artikel
  • »
  • Upload File Menggunakan Drag dan Drop Dengan Javascript Dan PHP

Upload File Menggunakan Drag dan Drop Dengan Javascript Dan PHP

previous Previous Page

Upload file atau mengirimkan file ke server menggunakan tekhnik drag dan drop memberikan nuansa yang berbeda bagi para pengguna halaman web. Pada website besar seperti google drive, dropbox dan aplikasi online yang berbasis file sharing sudah dipastikan menerapkan teknik DRAG dan DROP pada proses pengiriman file dalam layanan mereka. Hal ini untuk mempermudah pengguna dalam mengirimkan file mereka menuju server website tersebut jika dibandingkan dengan cara manual melalui tombol select file kemudian mengupload satu demi satu.

Pengiriman file dengan cara DRAG dan DROP file dilakukan dengan cara membuka file explorer dan web browser secara bersamaan dan diposisikan secara berdampingan. Cara mengirimkan file cukup dengan melakukan klik tahan pada file yang diinginkan kemudian file tersebut diseret (dragged) dan dilepas atau dijatuhkan (dropped) pada dropping area di web browser.

Pada kesempatan kali ini saya akan membagikan bagaimana cara membuat pengiriman file (upload file) dengan menggunakan DRAG dan DROP file. Dalam artikel ini, saya tidak akan menggunakan plugin tambahan dari pihak ketiga, namun cukup menggunakan Javascript dan Jquery. Hal ini agar halaman web akan terasa cukup ringan saat diload karena tidak dibebani data yang harus diload dari plugin tersebut.

Membuat Halaman Index

Halaman index digunakan sebagai halaman bagi pengguna dalam melakukan proses DRAG dan DROP file. Proses dimulai saat pengguna melakukan dragging (penyeretan) file pada file explorer. Kemudian area untuk melakukan peletakkan file (dropping area) pada borwser. Area ini dibatasi dengan wilayah tertentu yang biasanya ditandai dengan garis putus putus (stripped line).

Berikut halaman index.php :

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE html>
<html>
<head>
<title>Upload File With Drag And Drop File</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="style.css" rel="stylesheet">
<body>
<h1>Upload File With Drag And Drop File</h1>
<div id="drop_zone">
   <p>Drop file here</p>
   <p>or</p>
   <p><button type="button" id="btn_file_pick" class="btn btn-primary"><span class="glyphicon glyphicon-folder-open"></span> Select File</button></p>
   <p id="file_info"></p>
   <p><button type="button" id="btn_upload" class="btn btn-primary"><span class="glyphicon glyphicon-arrow-up"></span> Upload To Server</button></p>
   <input type="file" id="selectfile">
   <p id="message_info"></p>
</div>
<script>
var fileobj;
$(document).ready(function(){
   $("#drop_zone").on("dragover", function(event) {
     event.preventDefault();
     event.stopPropagation();
     return false;
   });
   $("#drop_zone").on("drop", function(event) {
     event.preventDefault();
     event.stopPropagation();
     fileobj = event.originalEvent.dataTransfer.files[0];
     var fname = fileobj.name;
     var fsize = fileobj.size;
     if (fname.length > 0) {
        document.getElementById('file_info').innerHTML = "File name : " + fname +' <br>File size : ' + bytesToSize(fsize);
     }
     document.getElementById('selectfile').files[0] = fileobj;
     document.getElementById('btn_upload').style.display="inline";
   });
   $('#btn_file_pick').click(function(){
     /*normal file pick*/
     document.getElementById('selectfile').click();
     document.getElementById('selectfile').onchange = function() {
     fileobj = document.getElementById('selectfile').files[0];
     var fname = fileobj.name;
     var fsize = fileobj.size;
     if (fname.length > 0) {
        document.getElementById('file_info').innerHTML = "File name : " + fname +' <br>File size : ' + bytesToSize(fsize);
     }
        document.getElementById('btn_upload').style.display="inline";
     };
   });
   $('#btn_upload').click(function(){
     if(fileobj=="" || fileobj==null){
        alert("Please select a file");
        return false;
     }else{
        ajax_file_upload(fileobj);
     }
   });
});
function ajax_file_upload(file_obj) {
   if(file_obj != undefined) {
     var form_data = new FormData();
     form_data.append('upload_file', file_obj);
     $.ajax({
        type: 'POST',
        url: 'upload.php',
        contentType: false,
        processData: false,
        data: form_data,
        beforeSend:function(response) {
          $('#message_info').html("Uploading your file, please wait...");
        },
        success:function(response) {
          $('#message_info').html(response);
          alert(response);
          $('#selectfile').val('');
        }
     });
   }
}
function bytesToSize(bytes) {
   var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
   if (bytes == 0) return '0 Byte';
   var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
   return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}
</script>
</body>
</html>

Penataan elemen HTML-nya menggunakan style.css :

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
body{ 
   padding: 20px;
}
#drop_zone {
   background-color: #FFE3E3;
   border: #B980F0 5px dashed;
   width: 100%;
   padding : 60px 0;
}
#drop_zone p {
   font-size: 20px;
   text-align: center;
}
#btn_upload, #selectfile {
   display: none;
}

Penjelasan :
Pada index.php-nya, terdapat beberapa elemen tag HTML yang digunakan sebagai tampilan dan input data bagi pengguna. Dropping area digunakan sebagai wadah bagi pengguna untuk melakukan peletakkan file. Lalu elemen tag <button> sebagai alternatif pengganti jika pengguna ingin memilih file tanpa melakukan drag dan drop file. Button ini akan menampilkan menu popup dengan isi file yang akan dipilih.

Kemudian tombol "Upload To Server", digunakan untuk mengirimkan file yang sudah dipilih pengguna menuju server.

Pada Javascript-nya, Dropping area dibatasi melalui elemen tag <div> dengan id "drop_zone". Elemen ini ditandai dengan border dalam bentuk garis putus-putus. Jika pengguna melakukan Dragging file pada file exprorer dan menjatuhkan file tersebut pada elemen tag tersebut maka akan memicu fungsi javascript drop(). Fungsi tersebut akan menyimpan data dalam bentuk object file pada variabel fileobj. Jika data tersebut sudah ada, maka tombol "Upload To Server" akan dimunculkan. Variabel fileobj, juga digunakan untuk menyimpan hasil data file yang dinputkan melalui tombol Select File.

Tombol "Upload To Server" merupakan elemen button dengan ID "btn_upload" yang berfungsi untuk melakukan eksekusi pengiriman file yang sudah dipilih menuju server. Pengiriman file dilakukan dengan metode AJAX, yaitu file dikirimkan menuju server secara background tanpa harus melakukan refresh terhadapat halaman yang aktif.

Membuat Halaman Upload File

Halaman upload file digunakan sebagai halaman untuk melakukan pemrosesan data. Data yang dikirimkan oleh pengguna pada halaman index.php akan diproses pada halaman ini. Halaman upload.php berisi rangkaian perintah untuk membuat folder penampung file, dan juga menyimpan file yang berhasil dimasukkan oleh pengguna pada server.

Berikut halaman upload.php :

PHP

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$folder="uploads/";
if (!file_exists($folder)) {
   mkdir($folder, 0777);
}
$move = move_uploaded_file($_FILES["upload_file"]["tmp_name"], $folder . "/" . $_FILES["upload_file"]["name"]);
if($move){
   echo "File uploaded successfully..";
}else{
   echo "Uploading failed!";
}
?>

Penjelasan :
Folder dengan nama uploads merupakan folder tujuan sebagai tempat untuk menyimpan file yang dikirimkan. Jika folder uploads tidak ada, maka akan folder tersebut akan diciptakan melalui fungsi mkdir().

File akan disimpan pada server melalui perintah move_uploaded_file(). Jika file berhasil disimpan maka sistem akan mengirimkan nilai kembalian berupa "File uploaded successfully.." dan jika gagal akan mengirimkan "Uploading failed!". Nilai kembalian tersebut merupakan pesan nilai keberhasilan yang akan ditampilkan pada elemen <div> dengan id "message_info" pada halaman index.php.

Hasil Output

Saat pengguna pertama kali melakukan load terhadap halaman index.php :

drag dan drop dengan javascript dan php

Saat pengguna melakukan dragging file :

drag dan drop dengan javascript dan php

Saat pengguna melakukan dropping file, dan file info berhasil ditampilkan :

drag dan drop dengan javascript dan php

Saat file berhasil disimpan pada server :

drag dan drop dengan javascript dan php

Berikut video keseluruhan proses uploading melalui drag dan drop :

Drag Dan Drop Untuk Multiple File

Cara di atas merupakan pengiriman file dengan batasan jumlah file berjumlah satu (single file). Lalu bagaimana jika jumlah file lebih dari satu atau berjumlah banyak?

Anda dapat mengirimkan file secara DRAG dan DROP untuk beberapa file sekaligus. Penyeleksian file secara MULTIPLE dilakukan dengan menekan tombol shift pada menu POP UP file picker. Agar penyeleksian file dapat dilakukan secara multiple, maka pada elemen tag <input> type file atribut multiple perlu diaktifkan terlebih dahulu. Caranya dengan menyertakan atribut multiple="true". Kemudian untuk memudahkan proses penangkapan data pada sisi server, atribut name harus dalam bentuk array. Caranya dengan menamai ulang atribut name dengan open-close Square Bracket. Misalnya dari "upload_file" menjadi "upload_file[]". Proses penamaan ulang ini dapat menggunakan bantuan Jquery.

Berikut halaman index.php pada proses drag dan drop file untuk multiple file upload :

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<!DOCTYPE html>
<html>
<head>
<title>Upload File With Drag And Drop File</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="style.css" rel="stylesheet">
<body>
<h1>Upload File With Drag And Drop File [Multiple]</h1>
<div id="drop_zone">
   <p>Drop file here</p>
   <p>or</p>
   <p><button type="button" id="btn_file_pick" class="btn btn-primary"><span class="glyphicon glyphicon-folder-open"></span> Select File</button></p>
   <p id="file_info"></p>
   <p><button type="button" id="btn_upload" class="btn btn-primary"><span class="glyphicon glyphicon-arrow-up"></span> Upload To Server</button></p>
   <input type="file" id="selectfile" multiple="true">
   <p id="message_info"></p>
</div>
<script>
var fileobj;
$(document).ready(function(){
   $("#drop_zone").on("dragover", function(event) {
     event.preventDefault();
     event.stopPropagation();
     return false;
   });
   $("#drop_zone").on("drop", function(event) {
     event.preventDefault();
     event.stopPropagation();
     fileobj = event.originalEvent.dataTransfer.files;
     if(fileobj.length>0){
     for(var f = 0; f < fileobj.length; f++) {
        var fname = fileobj[f].name;
        var fsize = fileobj[f].size;
        if (fname.length > 0) {
          document.getElementById('file_info').innerHTML += "File name : " + fname +' (<b>' + bytesToSize(fsize) + '</b>)<br>';
        }
     }
     }
     document.getElementById('selectfile').files = fileobj;
     document.getElementById('btn_upload').style.display="inline";
   });
   $('#btn_file_pick').click(function(){
     /*normal file pick*/
     document.getElementById('selectfile').click();
     document.getElementById('selectfile').onchange = function() {
        fileobj = document.getElementById('selectfile').files;
        if(fileobj.length>0){
        for(var f = 0; f < fileobj.length; f++) {
          var fname = fileobj[f].name;
          var fsize = fileobj[f].size;
          if (fname.length > 0) {
          document.getElementById('file_info').innerHTML += "File name : " + fname +' (<b>' + bytesToSize(fsize) + '</b>)<br>';
          }
        }
        }
        document.getElementById('btn_upload').style.display="inline";
     };
   });
   $('#btn_upload').click(function(){
     if(fileobj=="" || fileobj==null){
        alert("Please select a file");
        return false;
     }else{
        ajax_file_upload(fileobj);
     }
   });
});
function ajax_file_upload(file_obj) {
if(file_obj != undefined) {
   var form_data = new FormData();
   if(fileobj.length>0){
     for(var f = 0; f < fileobj.length; f++) {
     form_data.append('upload_file[]', file_obj[f]);
     }
   }
   $.ajax({
     type: 'POST',
     url: 'upload.php',
     contentType: false,
     processData: false,
     data: form_data,
     beforeSend:function(response) {
        $('#message_info').html("Uploading your file, please wait...");
     },
     success:function(response) {
        $('#message_info').html(response);
        alert(response);
        $('#selectfile').val('');
     }
   });
}
}
function bytesToSize(bytes) {
   var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
   if (bytes == 0) return '0 Byte';
   var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
   return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}
</script>
</body>
</html>

Penataan elemen HTML-nya menggunakan style.css :

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
body{ 
   padding: 20px;
}
#drop_zone {
   background-color: #FFE3E3;
   border: #B980F0 5px dashed;
   width: 100%;
   padding : 60px 0;
}
#drop_zone p {
   font-size: 20px;
   text-align: center;
}
#btn_upload, #selectfile {
   display: none;
}

Halaman upload.php digunakan sebagai proses pengiriman file secara MULTIPLE dan menyimpannya pada sisi server. File upload.php sebagai berikut :

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$folder="uploads/";
if (!file_exists($folder)) {
   mkdir($folder, 0777);
}
for($f=0; $f<count($_FILES["upload_file"]["tmp_name"]); $f++ ){
   $move = move_uploaded_file($_FILES["upload_file"]["tmp_name"][$f], $folder . $_FILES["upload_file"]["name"][$f]);
}
if($move){
   echo "File uploaded successfully..";
}else{
   echo "Uploading failed!";
}
?>

Berikut tampilan video secara keseluruhan pada upload file secara multiple file upload :

Source Code

Silahkan download source code beserta file pendukung pada tutorial ini.

Demikian artikel bagaimana cara melakukan upload file menggunakan DRAG dan DROP file dengan Javascript dan juga PHP. Semoga bermanfaat .

   0   3.446

Kategori : tag iconhtml - tag iconcss - tag iconjavascript - tag iconjquery - tag iconphp - tag iconajax - tag iconupload

facebooktwitterwhatapplinkedinpinterest

previous Previous Page

Tinggalkan Balasan

Nama Pengguna* :

Email* :

 

Mengirim Komentar

Setiap pengunjung situs ini dapat memposting komentar disini, namun tidak semua komentar dapat ditampilkan. Gunakan kalimat baku bahasa Indonesia yang mudah dimengerti. Dilarang memposting kalimat yang berisi ujaran kebencian, SARA, pornografi, perjudian dan spam. Komentar harus sesuai dengan topik. Untuk bahasan lainnya yang lebih mendalam dapat menggunakan sarana forum. Anda dapat mengirimkan suatu pertanyaan dan member lainnya akan menjawab pertanyaan Anda.
close

News Letters

Silahkan masukkan email Anda untuk berlangganan informasi kami

Polling

1. Apakah website ini menambah pengetahuan Anda?
 Ya
 Tidak
 Tidak Tahu
2. Seberapa sering Anda mengunjungi website ini?
 Sering
 Jarang
 Tidak Pernah
3. Apakah penilaian Anda terhadap website ini, jika melihat dari segi konten/isi?
 Sangat Bagus
 Bagus
 Cukup Bagus
 Kurang Bagus
4. Apakah penilaian Anda terhadap website ini, jika melihat dari segi tampilan?
 Sangat Bagus
 Bagus
 Cukup Bagus
 Kurang Bagus
5. Untuk meningkatkan kualitas website ini, Apakah saran Anda?

 


Visitor Live Chat

Silahkan anda memberikan masukkan chat (obrolan) pada fasilitas chat ini. Konten bebas, sopan dan menghargai pendapat orang lain..

 _Dicky (06 Mar 2021 at 03:24 pm)

Said : Oops, It's nice content

 rizky yuda (07 Mar 2021 at 12:30 pm)

Said : Konten cukup menambah wawasan...

 suryadi (13 Mar 2021 at 06:46 pm)

Said : Boleh request artikel cara koneksi database msyql ke php..

 Nettie Rutherfo (08 Apr 2021 at 12:30 pm)

Said : Auto

 Tedy (29 Mei 2021 at 12:09 pm)

Said : nice blog and articles..

 Ms. Doyle Mann (02 Jun 2021 at 09:56 pm)

Said : card

 flowrie_skylee (12 Jun 2021 at 01:24 pm)

Said : nice content

 Nelson Schaefer (12 Jul 2021 at 04:01 pm)

Said : JSON

 ooppp (18 Jul 2021 at 11:44 pm)

Said : 000popooppi

 Mrs. Jeff Boehm (01 Agt 2021 at 11:01 am)

Said : fuchsia

 dharma (07 Sept 2021 at 05:16 pm)

Said : ini support PHP 8?

 admin (12 Sept 2021 at 12:50 pm)

Said : #dharma masih dalam ruang lingkup PHP versi 7.
Namun untuk ke depannya akan dipertimbangkan agar support PHP 8, jika perubahan dari PHP 7 ke PHP 8 memang dirasa sangat signifikan.

 sadas (13 Jan 2022 at 09:48 am)

Said : Hello

 sutiyono (15 Jan 2022 at 09:36 am)

Said : konten cukup menarik.

 Fuad (08 Mar 2022 at 05:00 pm)

Said : Maksih bang kontennya, sangat membantu.

 admin (10 Mar 2022 at 12:18 pm)

Said : #Fuad Sama sama bang.. terima kasih sudah mampir di blog ini..

 Ferdian (09 Mei 2022 at 11:31 pm)

Said : bang bisa tolong buatkan contoh tamplate kirim email verifikasi gak?

 admin (10 Mei 2022 at 09:44 pm)

Said : Bang #Ferdian, artikelnya belum dibuat. Tapi ada kesamaan konsep yang dapat ditemukan pada halaman : Membuat Form Newsletters Interaktif Dengan Kode Verifikasi Dikirim Via Email,
Silahkan download source code dan file penunjangnya di sana. dan coba kembangkan untuk mengirimkan verifikasi via email untuk penggunaan yang lainnya.

 Abror (11 Jun 2022 at 09:08 am)

Said : Hallo min mau tanya kenapa script yang di konten teknik grabbing tidak bisa dibuka di laptop saya?

 admin (12 Jun 2022 at 12:11 am)

Said : #Abror stuck-nya dibagian mana bang? kalau localhost bisa aktifkan curl pada file php.ini dengan cara menghilangkan semicolon pada ;extension=php_curl.dll. Jika hosting online, dapat langsung dijalankan. cUrl dapat mengambil konten dan menampilkannya secara langsung pada halaman web.

 admin (12 Jun 2022 at 10:29 am)

Said : #Abror Silahkan akses artikel Menyalin konten suatu website teknik grabbing dengan native PHP, jika mengalami kesulitan dengan aktivasi cURL.. Terima kasih.

 SYAHRUL (23 Jun 2022 at 09:40 pm)

Said : oknull

 bang (26 Jun 2022 at 07:55 pm)

Said : bang caranya biar upload file dengan ekstensi tertentu di php gimana bang?

 admin (02 Jul 2022 at 11:34 am)

Said : #bang ??# Silahkan akses halaman Membatasi Upload File Dengan Format Tertentu Melalui Atribut HTML, Javascript Dan PHP. Pembatasan dapat dilakukan via HTML dengan menambahkan atribut accept, via javascipt dan juga via PHP script di sisi server.. have a nice day 😍😍 🤩..

 modas (04 Jul 2022 at 03:47 pm)

Said : halo

 Geoww (15 Agt 2022 at 11:45 pm)

Said : Tolong buat tutorial auto insert mysql, saat discaner kak, dan ditampilkan total yg m***k ke databasenya.

 Dita Sihombing (13 Sept 2022 at 02:12 pm)

Said : Dalam implementasi Digital Signature pada sistem untuk dapat signing and verify gimana caranya kak, tolong buat tutorial nya dong kak

Visitor Name
Email

 I'm not a robot