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 tekhnik drag dan drop dalam mengirimkan file pada 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 drap 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 dropping file setelah melakukan dragging (penyeretan) file pada file explorer. Area untuk melakukan peletakkan file (dropping area) dibatasi dengan wilayah tertentu yang biasanya ditandai dengan garis putus putus (stripped line).

Berikut halaman index.php :

Kode Script :

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

Penjelasan :
Pada HTML-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 ta <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 metoda 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 :

Kode Script :

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

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

Anda juga bisa mengirimkan file secara drag dan drop untuk beberapa file sekaligus. Penyeleksian file secara multiple dilakukan dengan menekan tombol shift pada menu popup file picker. Pada halaman index.php, Elemen tag <input> type file, atribut multiple harus diaktifkan terlebih dahulu. Jika tidak, maka seleksi secara multiple tidak akan berfungsi. Untuk menangkap data file dalam bentuk multiple, nama data harus dalam bentuk array. Nama data yang akan dikirimkan ke server perlu diubah dari "upload_file" menjadi "upload_file[]".

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

Kode Script :

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

Halaman upload.php untuk memproses pengiriman file secara multiple sebagai berikut :

Kode Script :

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

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 drop dan drop file dengan Javascript dan juga PHP. Semoga bermanfaat .

   0   1.761

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.

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

 admin(04 Mar 2021 at 10:52 am)

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

 billy_123 (06 Mar 2021 at 03:26 pm)

Said : Anyone, can you explain about HTMl.. what is it???

 _Dicky (06 Mar 2021 at 03:27 pm)

Said : HTML is abbreviation ..

 _Dicky (06 Mar 2021 at 03:28 pm)

Said : It's Stand for Hyper text mark up language..

 billy_123 (06 Mar 2021 at 03:28 pm)

Said : It's so clear right now..

 billy_123 (06 Mar 2021 at 03:29 pm)

Said : and what about CSS

 _Dicky (06 Mar 2021 at 03:29 pm)

Said : css for styling sheet guys..

 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.

Visitor Name
Email

 I'm not a robot