Create Upload file with Symfony 1.4


Bagi Anda yang sudah terbiasa menggunakan symfony, berikut ini kita coba share tentang beberapa trik yang biasa digunakan untuk membuat fitur upload file. Symfony sering digunakan untuk membuat aplikasi secara cepat dengan kualitas yang baik.

Dalam hal ini, upload file sering kali menjadi hal yang sangat penting pada aplikasi web. Namun terkadang menjadi hal yang membahayakan juga. Karena bisa menjadi celah untuk merusak aplikasi web kita. Nah beberapa trik sederhana akan kita bahas disini.

Pada Symfony sendiri ada beberapa cara (sedikitnya 3 cara) yang bisa kita gunakan untuk membuat form upload file. Saya coba akan share 2 cara :

1. Cara manual dengan Tag Input File.

<input type="file" id="uploadfile" name="uploadfile" />

2. Menggunakan widget Form yang dimiliki Symfony.

$this->setWidgets(array(
      'uploadfile'  => new sfWidgetFormInputFile(), ));

untuk pemula akan lebih mudah cara pertama. tapi hasilnya akan sama saja, tergantung kita konsisten dalam penggunaan name dan id. Perhatikan contoh diatas, saya identifikasi keduanya sebagai uploadfile. Seperti biasa form input ini Anda letakkan pada source template dari module yang Anda inginkan.

Menangkap file pada action class

Setelah itu kita masukkan script pada action.class untuk menangkap dan memproses file yang diupload, sesuai template module yang tujuan form Anda. Berikut ini contoh script PHP-Symfony yang digunakan untuk menangkap inputan file.

foreach ($request->getFiles() as $fileName) {
 $fileSize = $fileName['size'];
 $fileType = $fileName['type'];
 $theFileName = $fileName['name'];
 $uploadDir = sfConfig::get("sf_upload_dir");
 $Contacts_uploads = $uploadDir.'/contacts_uploads';

 if(!is_dir($Contacts_uploads))
    mkdir($Contacts_uploads, 0777);            

 move_uploaded_file($fileName['tmp_name'],
               "$Contacts_uploads/$theFileName");
}

Cara tangkap diatas adalah yang paling mudah. Kita tidak perlu pusing dengan nama dari inputan form. Atau jika dalam 1 form kita menggunakan banyak (lebih dari 1) input file. Code diatas secara otomatis akan menangkap semua object request dalam bentuk file, dan akan memproses satu-persatu.

Modifikasi Attribute File.

Nah disini kita bisa melakukan modifikasi sesuai kebutuhan dan kreatifitas yang kita inginkan. Ada beberapa atribut penting yang biasanya kita gunakan, terutama untuk melakukan filtering file upload. Atribut tersebut dikenali oleh Symfony sebagai array dari object file.

  1. size, untuk mengetahui besaran file yang diupload, dalam format byte.
  2. name, nama file upload.
  3. type, tipe file yang diupload. misal image/jpeg, document/doc, application/exe dan banyak lagi.
  4. error, untuk mengenali apa terjadi kesalahan pada file yang diupload.

Sebelum melakukan proses upload dengan move_uploaded_file, kita dapat melakukan pengecekan dari masing-masing atribut diatas. Misal,

if($fileSize < 4321000 && ($fileType == 'jpeg' || 
$fileType == 'jpg' || $fileType == 'png' || 
$fileType == 'bmp' || $fileType == 'doc' || 
$fileType == 'docx' || $fileType == 'pdf' ) && $fileError == null){

move_uploaded_file($fileName['tmp_name'], 
"$Contacts_uploads/$theFileName");

}else{
$this->getUser()->setFlash('notice', 
'Error! File yang Anda Upload Gagal.');
}

Pada contoh diatas, saya melakukan pembatasan pada besaran file dan tipe file yang akan diupload. Jika tidak sesuai dengan syarat yang ditentukan, maka file tidak akan ter-upload, dan akan muncul pesan error.

Selamat Mencoba!


5 responses to “Create Upload file with Symfony 1.4”

Leave a Reply

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