Some text some message..
Some text some message..
Some text some message..
Some text some message..
  • Beranda
  • »
  • Artikel
  • »
  • Upload File Menggunakan Library Jquery Form Dengan Status Bar

Upload File Menggunakan Library Jquery Form Dengan Status Bar

previous Previous Page

Upload file merupakan proses untuk mengirimkan file dalam berbagai format file berupa dokumen teks, gambar, audio maupun video menuju server. Data file pada proses upload dapat dikirimkan secara langsung ataupun lewat perantara ajax tanpa harus melakukan refresh halaman utama. Fungsi ajax akan melakukan proses pengiriman data secara background atau dibalik layar. Hal lain yang juga bisa disertakan adalah penambahan informasi kemajuan atau progress pengiriman file dalam bentuk progress bar ataupun status bar.

Penambahan progress bar pada pengiriman file atau uploading file secara langsung ke server tentu saja tidak bisa dilakukan. Penambahan progress bar hanya bisa dilakukan dengan perantara ajax.

Pada artikel kali ini saya akan menguraikan bagaimana mengirimkan file dengan menggunakan library Jquery Form. Jquery Form merupakan library yang digunakan untuk melakukan pengiriman data baik itu teks biasa maupun data dalam bentuk file menuju server. Jquery Form menerapkan konsep sistem ajax yang akan mengirimkan data secara di balik layar. Penerapan ajax pada Jquery Form agak berbeda dengan penerapan ajax yang pada umumnya harus mendescripsikan nilai data elemen HTML melalui script javascript terlebih dulu, lalu mengirimkannya ke server. Jquery Form tidak menerapkan hal ini, namun script pada Jquery Form akan secara langsung menarik seluruh data input yang berada di dalam elemen tag <form> dan memasukkannya pada script Jquery Form untuk dikirimkan menuju server.

Jquery Form dapat anda peroleh dan download pada https://github.com/jquery-form/form.

Membuat File Index

File index digunakan sebagai halaman utama bagi pengguna untuk memasukkan input data berupa file. File yang dapat dimasukkan bisa dalam bentuk teks, dokumen, gambar maupun video. Jadi tidak perlu adanya pembatasan dengan format file yang akan dikirimkan. Pada elemen tag <form> menggunakan atribut method "post" dan action "upload.php". Atribut ini harus disertakan karena Jquery Form akan melakukan pengumpulan data melalui atribut yang disertakan pada elemen tag form tersebut. Kemudian sebagai informasi progress yang sedang berjalan, beberapa elemen tag <div> juga perlu ditambahkan.

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 Jquery Form</title>
9.  <style type="text/css">
10. body{
11.  padding: 20px
12. }
13. form{
14.    padding: 10px;
15.    background: #71EFA3;
16.    border-radius: 10px;
17. }
18. .progress_container{
19.    display:none;
20.    position:relative;
21.    width:400px;
22.    height:20px;
23.    border: 1px solid #ddd;
24.    padding: 1px;
25.    border-radius: 3px;
26. }
27. .loading{
28.    position:absolute;
29.    display:inline-block;
30.    width:16px;
31.    top:1px;
32.    left:4%;
33. }
34. .bar{
35.    background-color: #DA0037;
36.    width:0%;
37.    height:20px;
38.    border-radius: 3px;
39. }
40. .percent {
41.    position:absolute;
42.    display:inline-block;
43.    font-weight:bold;
44.    top:1px;
45.    left:48%;
46. }
47. .bytes_progress{
48.    display:none;
49. }
50. #bytes_progress span{
51.    color:navy;
52. }
53. .upload_info{
54.    display:none;
55. }
56. .upload_info img{
57.    height:220px;
58.    width:auto;
59.    margin:10px;
60. }
61. </style>
62. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
63. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>>
64. <script src="https://cdn.jsdelivr.net/gh/jquery-form/form@4.3.0/dist/jquery.form.min.js" integrity="sha384-qlmct0AOBiA2VPZkMY3+2WqkHtIQ9lSdAsAn5RUJD/3vA5MKDgSGcdmIv4ycVxyn" crossorigin="anonymous"></script>
65. </head>
66. <body>
67. <h2>Upload File With Jquery Form</h2>
68. <form method="post" id="myForm" action="upload.php" enctype="multipart/form-data">
69.    <p>Please select a file</p>
70.    <div class="file_container">
71.      <p>
72.         <input type="file" name="upload_file" class="file" >
73.      </p>
74.      <p>
75.      <button type="submit" class="btn btn-primary" id="btn_submit"><span class="glyphicon glyphicon-arrow-up"></span> Upload File</button>
76.    </p>
77.    </div>
78.    <div class='progress_container' id="progress_container">
79.    <img src='loading.gif' class='loading' id='loading'/>
80.    <div class='bar' id='bar'></div>
81.    <div class='percent' id='percent'></div>
82.    </div>
83.    <div class="bytes_progress" id="bytes_progress">
84.    Please wait while uploading yours file..<br>
85.    Uploading : <span id="byte_position"></span> of <span id="total_byte"></span>
86.    </div>
87.    <div class="upload_info" id="upload_info"></div>
88. </form>
89. <script>
90. $(document).ready(function(){
91.    $('#btn_submit').click(function(){
92.      var file_val = $('.file').val();
93.      if(file_val == ""){
94.         alert("Please select a file");
95.         return false;
96.      }else{
97.         $('#myForm').ajaxForm({
98.         beforeSubmit: function() {
99.            $('#progress_container').css("display","block");
100.            $('#bytes_progress').css("display","block");
101.            $('#upload_info').css("display","block");
102.         
103.          var percentVal = '0%';
104.          $('#bar').css("width",percentVal);
105.          $('#percent').html(percentVal);
106.          console.log("percentval0 : " + percentVal);
107.         },
108. 
109.         uploadProgress: function(event, position, total, percentComplete) {
110.          var percentVal = percentComplete + '%';
111.          $('#bar').css("width",percentVal);
112.          $('#percent').html(percentVal);
113.          $('#byte_position').html(formatBytes(position));
114.          $('#total_byte').html(formatBytes(total));
115.          console.log("percentval : " + percentVal);
116.          console.log("position : " + formatBytes(position));
117.          console.log("total : " + formatBytes(total));
118.         },
119.         
120.         success: function() {
121.          $('#progress_container,#progress_bytes').css("display","none");
122.          $('.file').val("");
123.         },
124. 
125.         complete: function(xhr) {
126.            console.log("xhr : " + xhr);
127.          if(xhr.responseText)
128.          {
129.          $('#upload_info').html(xhr.responseText);
130.            
131.          }
132.         }
133.       });
134.      }
135.  });
136. 
137. });
138. 
139. const formatBytes = (bytes, decimals = 2) => {
140.  if (bytes === 0) {
141.  return '0 Bytes';
142.  }
143.  const k = 1024;
144.  const dm = decimals < 0 ? 0 : decimals;
145.  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
146.  const i = Math.floor(Math.log(bytes) / Math.log(k));
147.  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
148. }
149. 
150. </script>
151. </body>
152. </html>

Penjelasan :
Pada file index.php, untuk dapat menggunakan library Jquery Form maka kita harus mengikutkan library tersebut dengan menautkan linking script Jquery dan juga Jquery Form terlebih dahulu (baris ke-62-63). Kemudian pada elemen tag HTML <form> atribut id "myForm" digunakan sebagai identitas form agar form dengan id tersebut bisa dieksekusi melalui Jquery Form. Atribut method "post" dan atribut action "upload.php" juga harus disertakan.

Kemudian input dengan type file digunakan sebagai input data berupa file dari pengguna. Atribut name "upload_file" merupakan nama elemen tag yang akan digunakan sebagai nama bagi wadah file yang akan dikirimkan menuju server. Lalu elemen tag <div> dengan id "progress_container" digunakan sebagai wadah bagi informasi progress pengiriman file. Kontainer div tersebut berisi image loader, bar dan juga persentase bar yang mana isi progressnya diambil langsung dari hasil proses ajax pada Jquery Form. Jika proses upload file sudah berhasil ataupun gagal, maka hasil teks keberhasilan pengiriman file akan ditampilkan didalam elemen div dengan id "upload_info".

Pada javascript-nya, Jquery Form akan menginisialisasi form yang sudah diberi id tertentu. Di sini Jquery Form akan mengeksekusi form dengan id "myForm" dengan menggunakan metode $('#myForm').ajaxForm({ });. Di dalam metoda tersebut terdapat berbagai fungsi yang dapat disertakan untuk memanipulasi tampilan sesuai dengan nilai yang didapatkan selama proses pengiriman data file pada server. Fungsi tersebut di antaranya seperti beforeSubmit (kondisi sebelum penekanan tombol submit), uploadProgress (kondisi sedang proses pengiriman data), success (kondisi saat data berhasil dikirimkan pada server), dan complete (kondisi saat data berhasil dikirimkan dan ajax selesai dieksekusi).

Untuk mengisi nilai dari kemajuan progress bar, dapat mengambil nilai data kembalian dari fungsi uploadProgress yaitu function(event, position, total, percentComplete). Nilai position artinya posisi dari byte file yang sedang dikirim, total artinya nilai total byte file yang akan dikirim, percentComplete artinya nilai persentase byte file yang sedang dalam proses pengiriman.

Membuat halaman Upload File

Halaman upload.php digunakan sebagai tempat pemroses data yang sudah dikirimkan pengguna via Jquery Form.

Berikut halaman upload.php :

Kode Script :

1.  <?php
2.  $folder="uploads/";
3.  if(!is_dir){
4.     mkdir($folder);
5.  }
6.  $move = move_uploaded_file($_FILES["upload_file"]["tmp_name"], $folder.$_FILES["upload_file"]["name"]);
7.  if($move){
8.     $fileTypes = array('jpg', 'jpeg', 'gif', 'png');
9.     $fileParts = pathinfo($_FILES['upload_file']['name']);
10.    echo '<div>File has uploaded successfully..</div>';
11.    if (in_array(strtolower($fileParts['extension']), $fileTypes)) {
12.      echo '<img src="'.$folder."".$_FILES["upload_file"]["name"].'">';
13.      exit();
14.    }
15. }else{
16.    echo '<div>Uploading failed..</div>';
17.    exit();
18. }
19. ?>

Penjelasan :
Pada file upload.php, folder atau direktori tujuan sebagai wadah bagi file yang akan dikirim adalah folder upload. Perintah mkdir($folder) akan membuat folder dengan nama "upload/" jika folder yang bersangkutan belum dibuat. Kemudian move_uploaded_file digunakan untuk menyimpan file dari pengguna pada server. Jika file berhasil disimpan, maka nilai File has uploaded successfully akan diberikan disertai gambar (img) jika file berbentuk gambar. Jika file gagal disimpan, maka nilai kembalian Uploading failed akan dikirimkan.

Hasil Output

Tampilan saat halaman dimuat pertama kali pada browser :

upload file menggunakan jquery form dengan status bar

Tampilan saat pengguna sudah melakukan seleksi file :

upload file menggunakan jquery form dengan status bar

Tampilan saat proses pengiriman file sedang berlangsung (onprogress), terlihat gambar loader yang bergerak dan juga progress bar :

upload file menggunakan jquery form dengan status bar

Tampilan saat file berhasil dikirimkan ke server dengan status berhasil :

upload file menggunakan jquery form dengan status bar

Berikut tampilan video keseluruhan proses uploading file dengan menggunakan Jquery Form :

Upload Multiple File Menggunakan Library Jquery Form

Pengiriman file pada penjelasan di atas adalah untuk satu file saja. Lalu bagaimana jika file yang akan dikirimkan oleh pengguna lebih dari satu atau bahkan puluhan? Anda tidak perlu khawatir karena library Jquery Form juga support untuk mengirimkan file secara multiple file. Untuk dapat memanfaatkan fitur ini, anda perlu membuat lagi beberapa buah elemen tag <input> jenis file dan silahkan beri nama elemen tersebut dengan namanya sendiri-sendiri.

Namun saya tidak akan menambahkan beberapa buah elemen tag <input> type file seperti diatas. Cukup satu buah saja elemen <input> jenis file namun dengan tambahan atribut multiple "true". Atribut ini akan memungkinkan pengguna untuk melakukan seleksi beberapa file sekaligus sesuai dengan keperluan. Sehingga pengguna tidak perlu melakukan klik berkali-kali untuk memasukkan file yang lainnya. Atribut name disini harus menggunakan akhiran "[]", hal ini untuk mewakili nama dalam bentuk nilai array yang akan digunakan nantinya pada sisi server.

Berikut file index.php dengan penambahan atribut input jenis file menjadi multiple "true" :

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 Jquery Form</title>
9.  <style type="text/css">
10. body{
11.  padding: 20px
12. }
13. form{
14.    padding: 10px;
15.    background: #71EFA3;
16.    border-radius: 10px;
17. }
18. .progress_container{
19.    display:none;
20.    position:relative;
21.    width:400px;
22.    height:20px;
23.    border: 1px solid #ddd;
24.    padding: 1px;
25.    border-radius: 3px;
26. }
27. .loading{
28.    position:absolute;
29.    display:inline-block;
30.    width:16px;
31.    top:1px;
32.    left:4%;
33. }
34. .bar{
35.    background-color: #DA0037;
36.    width:0%;
37.    height:20px;
38.    border-radius: 3px;
39. }
40. .percent {
41.    position:absolute;
42.    display:inline-block;
43.    font-weight:bold;
44.    top:1px;
45.    left:48%;
46. }
47. .bytes_progress{
48.    display:none;
49. }
50. #bytes_progress span{
51.    color:navy;
52. }
53. .upload_info{
54.    display:none;
55. }
56. .upload_info img{
57.    height:220px;
58.    width:auto;
59.    margin:10px;
60. }
61. </style>
62. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
63. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>>
64. <script src="https://cdn.jsdelivr.net/gh/jquery-form/form@4.3.0/dist/jquery.form.min.js" integrity="sha384-qlmct0AOBiA2VPZkMY3+2WqkHtIQ9lSdAsAn5RUJD/3vA5MKDgSGcdmIv4ycVxyn" crossorigin="anonymous"></script>
65. </head>
66. <body>
67. <h2>Upload File With Jquery Form</h2>
68. <form method="post" id="myForm" action="upload.php" enctype="multipart/form-data">
69.    <p>Please select a file</p>
70.    <div class="file_container">
71.      <p>
72.         <input type="file" name="upload_file[]" class="file" multiple="true">
73.      </p>
74.      <p>
75.      <button type="submit" class="btn btn-primary" id="btn_submit"><span class="glyphicon glyphicon-arrow-up"></span> Upload File</button>
76.    </p>
77.    </div>
78.    <div class='progress_container' id="progress_container">
79.    <img src='loading.gif' class='loading' id='loading'/>
80.    <div class='bar' id='bar'></div>
81.    <div class='percent' id='percent'></div>
82.    </div>
83.    <div class="bytes_progress" id="bytes_progress">
84.    Please wait while uploading yours file..<br>
85.    Uploading : <span id="byte_position"></span> of <span id="total_byte"></span>
86.    </div>
87.    <div class="upload_info" id="upload_info"></div>
88. </form>
89. <script>
90. $(document).ready(function(){
91.    $('#btn_submit').click(function(){
92.      var file_val = $('.file').val();
93.      if(file_val == ""){
94.         alert("Please select a file");
95.         return false;
96.      }else{
97.         $('#myForm').ajaxForm({
98.         beforeSubmit: function() {
99.            $('#progress_container').css("display","block");
100.            $('#bytes_progress').css("display","block");
101.            $('#upload_info').css("display","block");
102.         
103.          var percentVal = '0%';
104.          $('#bar').css("width",percentVal);
105.          $('#percent').html(percentVal);
106.          console.log("percentval0 : " + percentVal);
107.         },
108. 
109.         uploadProgress: function(event, position, total, percentComplete) {
110.          var percentVal = percentComplete + '%';
111.          $('#bar').css("width",percentVal);
112.          $('#percent').html(percentVal);
113.          $('#byte_position').html(formatBytes(position));
114.          $('#total_byte').html(formatBytes(total));
115.          console.log("percentval : " + percentVal);
116.          console.log("position : " + formatBytes(position));
117.          console.log("total : " + formatBytes(total));
118.         },
119.         
120.         success: function() {
121.          $('#progress_container,#progress_bytes').css("display","none");
122.          $('.file').val("");
123.         },
124. 
125.         complete: function(xhr) {
126.            console.log("xhr : " + xhr);
127.          if(xhr.responseText)
128.          {
129.          $('#upload_info').html(xhr.responseText);
130.            
131.          }
132.         }
133.       });
134.      }
135.  });
136. 
137. });
138. 
139. const formatBytes = (bytes, decimals = 2) => {
140.  if (bytes === 0) {
141.  return '0 Bytes';
142.  }
143.  const k = 1024;
144.  const dm = decimals < 0 ? 0 : decimals;
145.  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
146.  const i = Math.floor(Math.log(bytes) / Math.log(k));
147.  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
148. }
149. 
150. </script>
151. </body>
152. </html>

Berikut halaman upload.php :

Kode Script :

1.  <?php
2.  $dir = "uploads/";
3.  if(!is_dir($dir)){
4.     mkdir($dir);
5.  }
6.  for($x=0; $x<count($_FILES['upload_file']['name']); $x++){
7.     $move = move_uploaded_file($_FILES["upload_file"]["tmp_name"][$x], $dir.$_FILES["upload_file"]["name"][$x]);
8.     if($move){
9.     $fileTypes = array('jpg', 'jpeg', 'gif', 'png');
10.    $fileParts = pathinfo($_FILES['upload_file']['name'][$x]);
11.    $no = $x+1;
12.    echo '<div>File ' . $no . ' has uploaded successfully..</div>';
13.      if (in_array(strtolower($fileParts['extension']), $fileTypes)) {
14.         echo '<img src="'.$dir."".$_FILES["upload_file"]["name"][$x].'">';
15.      }
16.    }else{
17.      echo '<div>Uploading file ' . $no . 'failed..</div>';
18.    }
19. }
20. ?>

Tampilan video penuh proses uploading multiple file dengan menggunakan library Jquery Form

Source Code

Silahkan download source code beserta file pendukung pada tutorial ini.

Demikian tutorial bagaimana cara melakukan upload file menggunakan library Jquery Form dengan dilengkapi status bar. Semoga bermanfaat .

   0   935

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