Membuat Image Uploader
Kali ini saya membahas tentang pembuatan aplikasi sederhana untuk upload file ke server. Walaupun demo yang saya buat hanya bisa digunakan untuk upload gambar, dengan sedikit modifikasi, sourcecode aplikasi ini dapat digunakan untuk berbagai file, juga bisa diubah dari uploader menjadi downloader. Berikut ini demonya :
Penting - Silakan coba upload gambar. Besar file maksimum 100KB ( bandwidth mahal ). Gambar yang Anda upload akan dihapus secara otomatis setiap jam. Dan ingat UU IT yang baru, jangan upload gambar jorok.
Komponen utama dari aplikasi ini adalah class FileReference. Class ini yang memungkinkan kita memilih dan meng-upload file yang kita inginkan. Detil tentang class ini bisa Anda baca sendiri di manual. Berikut ini methods dan beberapa tipe events yang akan kita gunakan :
- Event.SELECT
- Event.OPEN
- DataEvent.UPLOAD_COMPLETE_DATA
- FileReference.browse()
- FileReference.upload()
- FileReference.cancel()
Saya juga menggunakan beberapa tipe Events yang sifatnya opsional tetapi sangat bermanfaat, khususnya untuk debugging, yaitu :
- IOErrorEvent.IOError
- HTTPStatusEvent.HTTP_STATUS
Di sisi server, saya menggunakan sebuah skrip PHP sederhana yang bisa Anda cari sendiri di Internet, silakan tanya Om Google. Di manual Flash atau Flex juga ada contoh skrip serupa.
Diagram
Di bawah ini diagram aplikasi yang akan kita buat. Klik gambar untuk membuka gambar aslinya yang lebih besar.
Silakan unduh ImageUplader.zip dan buka file Uploader_starter.as. Ganti nama file ini dengan Uploader.as ( sama dengan nama class-nya yaitu Uploader). Buka juga file ImageUploader.fla.
Class Uploader (starter)
Instance Variables
Kita definisikan dulu beberapa instance variable dan konstanta. Kita mulai dengan konstanta berupa alamat URL skrip PHP dan direktori tempat gambar disimpan serta ukuran maksimum file gambar yang bisa di-upload.
Berikutnya adalah instance variable yang berkaitan dengan objek FileReference.
Apa hubungan antara objek FileReference dan FileFilter ? Silakan Anda baca sendiri di manual atau di livedocs.
Inisialisasi
Proses inisialisasi kita bagi dalam dua bagian yaitu inisialisasi FileReference : initFileRef( ) dan inisialisasi UI : init ( ). Kenapa? Biar nggak ruwet.
Inisialisasi FileReference
Di dalam function initFileRef( ), kita buat sebuah objek FileReference dan kita definisikan pula event handler untuk objek ini.
Mari kita lihat beberapa event di atas :
- Event.OPEN : di-broadcast pada saat FileReference membuka koneksi dengan server
- Event.SELECT : di-broadcast pada saat kita memilih sebuah file
- DataEvent.UPLOAD_COMPLETE_DATA : di-broadcast pada saat file selesai di-upload . Untuk upload data, event ini lebih cocok digunakan daripada Event.COMPLETE.
- ProgressEvent.PROGRESS : di-broadcast selama proses upload berlangsung
- IOErrorEvent.IOError : di-broadcast jika terjadi masalah penulisan/pembacaan data
- HTTPStatusEvent.HTTP_STATUS : di-broadcast pada saat FileReference menerima respon dari server. Event ini sangat berguna untuk debugging komunikasi antara Flash dengan server.
Untuk efisiensi, empat event yang pertama, kita handle saja dengan satu listener function. Sedangkan dua yang terakhir, kita handle dengan dua function yang berbeda karena kedua event ini lebih banyak berperan dalam proses komunikasi dengan server dan supaya bisa digunakan untuk keperluan debugging jika Anda ingin memodifikasi sourcecode untuk membuat aplikasi yang lebih kompleks.
Sekarang kita lihat function fileRefListener() yang akan meng-handle keempat event di atas.
Class Event adalah induk ( superclass ) dari semua event yang lain. Jadi, dengan mendeklarasikan class ini sebagai argumen fileRefListener() kita telah membuat event handler yang bisa menangani berbagai macam event. Dan karena semua event memiliki properti type kita tinggal menggunakan properti ini untuk mendeteksi jenis event yang diterima oleh fileRefListener(). Karena event.type yang mungkin diterima oleh fileRefListener() ada lebih dari dua macam, lebih efisien kalo kita menggunakan statemen switch-case.
Blok case I : menampilkan komponen ProgressBar jika Event.type adalah Event.OPEN.
Blok case II : pada saat kita (user) memilih sebuah file atau dengan kata lain pada saat Event.type yang diterima adalah Event.SELECT, maka yang pertama dilakukan oleh fileRefListener() adalah mengecek ukuran/besar file tersebut. Jika ukurannya melebihi ukuran maksimum, maka baris di bawah if tidak akan diproses karena statemen return akan membatalkan eksekusi blok case ini. Jika ukuran file masih di bawah ukuran maksimum, maka yang pertama dilakukan oleh function ini adalah mengambil nilai dari properti name milik objek FileReference. Properti ini bertipe string dan berisi nama file yang dipilih.
Directory path dari file ini tidak bisa diakses dengan alasan sekuriti. Kita hanya bisa mengakses directory path jika kita membuat aplikasi untuk Adobe AIR.
Kemudian, karena sudah ada file yang dipilih, maka uploadButton akan diaktifkan. Nama file yang telah dipilih ditampilkan di filename_txt.
Blok case III : saat function ini menerima DataEvent.UPLOAD_COMPLETE_DATA, ProgressBar disembunyikan dan semua tombol diaktifkan kembali. Sebuah link yang menunjuk pada alamat URL gambar yang baru di-upload ditampilkan di TextField _status.
Blok case IV : selama proses upload berjalan, tombol browseButton dan uploadButton di-nonaktifkan. Hanya ada satu tombol yang bisa diklik, yaitu cancelButton. Selama proses ini pula, ProgressBar dimanipulasi sedemikian rupa sehingga lebar bar-nya menunjukkan perbandingan antara jumlah bytes yang sudah selesai di-upload dengan besar file total.
Inisialisasi UI
Nggak ada yang spesial dari function ini. Di sini kita hanya perlu mendefinisikan beberapa instance variable , men-disable beberapa tombol, melakukan inisialisasi terhadap komponen ProgressBar, dan mendefinisikan event handler untuk uploadButton dan browseButton.
That's all, folks!
Uploader.as (final)
Links
- Sourcecode : ImageUplader.zip
- Adobe Livedocs : FileReference class


Comments [5]
1. yuda , 1400 days ago #
saya yuda,, saya tertarik sekali dengan AS. Semoga masputih tetap posting trik dsb
2. Fajar Sylvana , 1398 days ago #
Keren Banget mas Tutorialnya… Keep on going Man…
3. budi , 1398 days ago #
Hi..Nggi…
wah.. tambah nggilani koen saiki yo…
luar biasa …!!!
salut.. and keep going jess…!!
4. phat , 1377 days ago #
Numpang nanya mas :)
Kalo saya pengen bikin image gallery (offline) dengan image resource yg sblmny dapat saya browse dan select terlebih dahulu dari gambar2 pd komputer saya, kira2 apa bisa modif dari “image uploader” ini?
Gimana yha kalo tanpa PHP ato aplikasi server lainnya, karena pengennya ini bisa jalan di komputer lokal tanpa perlu server.
ThxB4 n’ salam kenal
5. andres setiawan , 1345 days ago #
selamat sore,
saya adalah pemula di dalam dunia cyber ini tapi saya ingin lebih mengetahui trick-trick tentang bergaul di dlam dunia cyber.
jadi saya minta tolong untuk pembuatan URL dan Bloger yang sederhana tapi menarik.
salam kenal dan terima kasih
Commenting is closed for this article.