[Yii Framework] Multi File Upload

Pada suatu kasus kita ingin membuat sebuah fungsi untuk mengupload beberapa file sekaligus.. Beruntung pada Yii sudah menyediakan sebuah control “CMultiFileUpload” yang dapat kita gunakan dengan cukup sederhana..

Untuk menggunakan control ini, masukkan code berikut pada tampilan anda:

<?php
    $this->widget('CMultiFileUpload', array(
         'name' => 'namaAttribute',
         'accept' => 'jpeg|jpg|gif|png|pdf|doc|docx|xlx|xlsx|zip|rar',
         'duplicate' => 'Duplicate file!',
         'denied' => 'Type file yang diizinkan adalah jpeg,jpg,gif,png,pdf,doc,docx,xlx,xlsx,zip,rar',
     ));
?>

jangan lupa memasukkan code berikut pada form anda saat pendeklarasian form:

<?php $form=$this->beginWidget('CActiveForm', array(
    'enableAjaxValidation'=>true,
    'htmlOptions' => array('enctype'=>'multipart/form-data'),
)); ?>

Anda lihat bukan pada ‘htmlOptions’ terdapat code yang kita gunakan untuk mengizinkan penguploadan suatu file..

Lalu untuk menyimpan file tersebut secara bersamaan, gunakan code berikut pada controller:

         $dariPc = CUploadedFile::getInstancesByName('namaAttribute');
           if(isset($dariPc) && count($dariPc) > 0) 
            {
                foreach ($dariPc as $i=>$ii) 
                {
                        $ii->saveAs(Yii::app()->basePath.'/../filenya/'.$namafile);
                        // kode di atas digunakan untuk menyimpan data ke dalam aplikasi, variabel $namafile saya anggap
                       //  sudah anda buat..
                }
            }

Selesai..

Selamat mencoba.. Semoga membantu..🙂

26 Responses to [Yii Framework] Multi File Upload

  1. dayat says:

    mas bro,,
    kog masih ndak bisa ya uploadNya..

    ndak da pesan error apa2..

    jdi bingung ni mw tanya apanya

  2. ga bisanya kayak gimana gan?

  3. dayat says:

    tu yang bikin ane bingung gan,, form uploadnya muncul tp wktu klik tmbol submit g bisa nyimpen & gak da pesan error..

    kalo posting yang upload file satu persatu dh ane coba & berhasil

  4. dayat says:

    gni ja gan,, ane minta tlg,, ada gak extensions yii bwt upload image & sekaligus simpan path imageNya ke database.?

    aneh dh coba elfinder,,tp g tw gimana dpetin path & nama filenya yg mo ane simpn di database

  5. mksd ane proses nya jalan ga gan? data yang lain ke save apa nggak? kondisi2 nya lah mksd nya..

  6. yang ane jelasin di atas udah bisa nglakuin yang aga mksud kok gan.. tapi emang harus di pelajari dulu gan..

  7. Risdo says:

    mas sabit untuk script yg ini ditaruh dmn ya?? sorry saya msh bingung

    $dariPc = CUploadedFile::getInstancesByName(‘namaAttribute’);
    if(isset($dariPc) && count($dariPc) > 0)
    {
    foreach ($dariPc as $i=>$ii)
    {
    $ii->saveAs(Yii::app()->basePath.’/../filenya/’.$namafile);
    // kode di atas digunakan untuk menyimpan data ke dalam aplikasi, variabel $namafile saya anggap
    // sudah anda buat..
    }
    }

  8. di controller gan, tepatnya di action agan jalaninnya..

  9. Chucky Blood says:

    Klo untuk melihat file yang di upload nya gmn gan ???

  10. buat aja sebuah link yang isi link ny ngarah ke path file yang udah di upload tadi gan..

  11. emen says:

    gan kalau pas update, dokumen2 yg udh ke upload bs g tampil pke CMultiFileUpload? dpt nyoba tp g keluar daftar dokumennya, mesti upload ulang jdnya

  12. kalo biar bisa nampilin file lama juga itu di tampilin aja pake CHtml::link() gan. Terus di bawah nya di tambhain CMultiFIleUpload. Sebenernya itu ga berhubungan, cuma untuk mudahin user aja kalo-kalo mau ngeliat file yang lama..

  13. aep says:

    gan help gan….
    ane udh nyoba CMultiFileUpload………anehnya gambar bisa kesimpen di direktori tapi databasenya ttp kosong gan, ane ga tau siapa yg nyolong tu datanya…..source _form.php-nya kaya gini:

    labelEx($model,’attachment’); ?>
    widget(‘CMultiFileUpload’, array(
    ‘name’ => ‘attachment’,
    ‘accept’ => ‘jpeg|jpg|gif|png|pdf|doc|docx|xlx|xlsx|zip|rar’,
    ‘duplicate’ => ‘Duplicate file!’,
    ‘remove’=>Yii::t(‘ui’,’Remove ‘File Is Not Allowed, Upload Only: jpeg,jpg,gif,png,pdf,doc,docx,xlx,xlsx,zip,rar’,
    ));?>
    error($model,’attachment’); ?>

    terus Controlernya:

    public function actionCreate()
    {

    $model=new Content;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST[‘Content’]))
    {
    $model->attributes=$_POST[‘Content’];
    $images = CUploadedFile::getInstancesByName(‘attachment’);
    if(isset($images) && count($images) > 0)
    {
    foreach ($images as $i=>$ii)
    {
    //echo $ii ->name. ”;
    if ($ii->saveAs(Yii::getPathOfAlias(‘webroot’).’/images/’.$ii->name))
    {
    $img_add = new Content();
    $img_add->attachment = $ii->name;
    //$img_add->topic_id = $model->idpropinsi;
    $img_add->save();
    }
    else
    $img_add = new Content();
    $img_add->attachment = $ii->name;
    //$img_add->topic_id = $model->idpropinsi;
    $img_add->save();
    //}

    if($model->save())
    {
    $this->redirect(array(‘view’,’id’=>$model->id));

    }
    }
    }
    }

    //if($model->save())
    //$this->redirect(array(‘view’,’id’=>$model->id));

    $this->render(‘create’,array(
    ‘model’=>$model,
    ));

    }

    modelnya ky gini gan:

    array(‘attachment’, ‘file’,
    ‘types’=>’jpeg,jpg,gif,png,pdf,doc,docx,xlx,xlsx,zip,rar,rtf,ppt,pptx,txt’, ‘allowEmpty’=>true, ‘on’=>’insert,update’),
    array(‘title, attachment’, ‘length’, ‘max’=>255, ‘on’=>’insert,update’),

    kl kasusnya kaya gini yang salah siapa gan??

  14. itu coba agan pastiin validasi nya udah lolos ato belum gan.. kemungkinan kalo ga ada pesan error nya itu karena validasi nya ga ada gan..

  15. ada pesan error nya gan?

  16. gan saya newbi
    kan saya upload file bertype pdf udah berhasil
    trus saya mw tanya cara agar file pdf yg saya upload tadi agar bisa di download kembali dari form view???

  17. anton says:

    gan kenapa ya q uda masukin d controller sreate nya kug gambar nya jd blank putih??? thanks mas sabit

  18. ayu says:

    apa yg salah

    public function actionCreate($id)
    {
    $model=new Gallery;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST[‘Gallery’]))
    {
    $model->attributes=$_POST[‘Gallery’];
    $model->id_album=$id;
    $dariPc = CUploadedFile::getInstancesByName(‘poto’);
    if(isset($dariPc) && count($dariPc) > 0)
    {
    foreach ($dariPc as $i=>$ii)
    {
    $ii->saveAs(Yii::app()->basePath.’/../images/gallery/’.$model->poto);
    // kode di atas digunakan untuk menyimpan data ke dalam aplikasi, variabel $namafile saya anggap
    // sudah anda buat..
    }
    $this->redirect(array(‘view’,’id’=>$model->id));
    }
    }

    $this->render(‘create’,array(
    ‘model’=>$model,
    ));
    }

    CREATE TABLE `gallery` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `judul` VARCHAR(50) NOT NULL COLLATE ‘utf8_swedish_ci’,
    `keterangan` TINYTEXT NOT NULL COLLATE ‘utf8_swedish_ci’,
    `poto` VARCHAR(50) NOT NULL COLLATE ‘utf8_swedish_ci’,
    `id_album` INT(11) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `FK_gallery_album` (`id_album`),
    CONSTRAINT `FK_gallery_album` FOREIGN KEY (`id_album`) REFERENCES `album` (`id`)
    )
    COLLATE=’utf8_swedish_ci’
    ENGINE=InnoDB;

  19. ayu says:

    gk mau kesimpen gallery/create redirek gallery/create bukan ke gallery/views

  20. dewi says:

    koment dihapus

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: