fbpx

cara upload file dengan coding ajax sederhana

Hei.. sekarang sudah tahun 2017, dimana teknologi bukan hanya terpusat pada teknologi desktop. Sekarang aplikasi mengarah ke penggunaan Software As a Service yakni aplikasi yang bersifat mobile, multiuser dan flexible. Membangun aplikasi dengan beberapa kriteria diatas tidak semudah ndas mu…  😀 . Misalnya saja dibangun di PHP ada banyak tutorial, script contoh, framework serta coding standard yang berbeda-beda dalam menerapkan suatu pembangunan aplikasi.

PHP merupakan bahasa berbasis komunitas sehingga untuk aturan coding dan beberapa hal terkati penggunaannya diserahkan sepenuhnya ke komunitas. sehingga sangat berbeda dengan coding berbasis proprietary based dimana coding sudah standar.

Sebenarnya paragraf diatas cuman kalimat pembuka aja, daripada cuman langsung to the point kan ga mesra hehe… Cukup deh kalimat pembukanya. sekarang kita to the point aja deh…

saya akan membagikan cara sederhana untuk mengupload file dengan menggunakan ajax.

berikut script yang harus kalian siapkan.

  1. Script utama uploader berbasis javascript
  2. script ajax sebagai eksekutor uploader
  3. script HTML sebagai user interface atau tampilan dasar aplikasi
  4. script server based uploader dengan PHP.

Script Utama uploader berbasis javascript :

 
//https://stackoverflow.com/questions/2320069/jquery-ajax-file-upload
//UPLOAD CLASS

var baseUrl = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname.split('/')[1];
var Upload = function (file) {
    this.file = file;
};

Upload.prototype.getType = function() {
    return this.file.type;
};
Upload.prototype.getSize = function() {
    return this.file.size;
};
Upload.prototype.getName = function() {
    return this.file.name;
};
Upload.prototype.doUpload = function (attachment_type, form_token, dom) {
    var that = this;
    var formData = new FormData();
  

    // add assoc key values, this will be posts values
    formData.append("file", this.file, this.getName());
    formData.append("upload_file", true);
    formData.append("attachment_type", attachment_type );
    formData.append("form_token", form_token );

    $.ajax({
        type: "POST",
        url: baseUrl + "/your url/php_uploader.php",
        xhr: function () {
            var myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) {
                myXhr.upload.addEventListener('progress', that.progressHandling, false);
            }
            return myXhr;
        },
        success: function (data) {
            // your callback here
            $(dom).hide();
            $(dom).prev('.uploadbutton').hide();
            $(dom).next().next(".upload_keterangan").show();

            $(dom).next().next(".upload_keterangan").find('.icon-status-succes').show();
            $(dom).next().next(".upload_keterangan").find('.file_name').html(data);



        },
        error: function (error) {
            // handle error

            $(dom).next().next(".upload_keterangan").show();
                 $(dom).next().next(".upload_keterangan").find('.icon-status-error').show();
            $(dom).next().next(".upload_keterangan").find('.file_name').html(data);

        },
        async: true,
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        timeout: 60000
    });
};

Upload.prototype.progressHandling = function (event) {
    var percent = 0;
    var position = event.loaded || event.position;
    var total = event.total;
    var progress_bar_id = ".progress-wrp";
    if (event.lengthComputable) {
        percent = Math.ceil(position / total * 100);
    }
    // update progressbars classes so it fits your code
    $(progress_bar_id + " .progress-bar").css("width", +percent + "%");
    $(progress_bar_id + " .status").text(percent + "%");

    if(percent == 100)
    {
          $(progress_bar_id).fadeOut(2000);

          
    }


};

insert file diatas dihalaman HTML nantinya dalam block <script> </script>

 

script ajax sebagai eksekutor uploader

 //lihat disini ada class .upload_input yang akan digunakan sebagai trigger atau pemicu pemanggilan kelas ini
$(document).on('change','.upload_input',function(){

      
    var file = $(this)[0].files[0];
    var upload = new Upload(file);

   

    // may check size or type here with upload.getSize() and upload.getType()

    // execute upload
    upload.doUpload(attachment_type, form_token, this);
});

script tampilan HTML

//jangan lupa diinsert script diatas ya di halaman HTML ini 

<input type="file" name="file_upload" class="upload_input" >

 

PHP uploader

 
//http://php.net/manual/en/features.file-upload.post-method.php
<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = 'tentukan_directory_mu';
$uploadfile = $uploaddir . basename($_FILES['file_upload']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['file_upload']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

Selesai ?

Tentu saja belum mang enak aja… hehe  😛 , yang diatas tersebut cuman script sederhana doang, ga ada pemeriksaan ukuran file yang diupload, pemeriksaan jenis file atau mime, pengamanan terhadap isi file, upload dengan banyak file / multiple file upload, upload berbasis chunk. but…. dengan script sederhana diatas tinggal dikembangin aja bagaimana cara agar bisa mencapai beberapa prinsip keamanan dalam upload file.

sebagai bonus berikut akan dituliskan agar tampilan browse (pada tombol input pemilihan file di tampilan HTML) menjadi tidak boring, maka kita akan menambahkan trigger dengan menggunakan jquery sehingga tampilan pemilihan file akan bebas kita styling sesuai dengan kesukaan ndas mu.

 

Yang kita perlukan adalah.
1. File HTML .

 <div class="uploadbutton btn btn-info btn-xs"><i class="glyphicon glyphicon-paperclip"></i> Pilih file</div>
 
 <input type="file" name="form_name" class="upload_input"  id="upload_form"  id="upload" style="visibility:hidden;">

2. Script javascript mentrigger class uploadbutton untuk membuka browser file
ini ndas. ..  😛

 
//to remove ugly button browser html
//hoi jangan lupa ya ini harus ada jquerynya
$(document).on('click','.uploadbutton',function(){

    $(this).next('input[type=file]').click();
 });

akhirnya selesai ?

nda sekarang aku akan menyelesaikan pekerjaan coding ini… ga akan selesai sampai kiamat hahaha

 

Leave a Comment

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