Flash aracılığı ile d osya upload işlemi Flash8 ile son derece kolaylıkla uygulanabilmektedir. FileReference nesnesi ve basit bir php dosyası uygulama için yeterli olmaktadır.

Alttaki upload çalışması doğal olarak şu haliyle çalışmamaktadır. Kullanıcıların deneme amaçlı dosya gönderme işlemi için yeterli server alanım bulunmamaktadır. Fakat indireceğiniz dosya hatasız çalışacaktır. Bu çalışmayı basit bir ftp programı olarak kullanabilirsiniz.

Uygulama:

1- Önce php dosyasına gözatalım:



if ($_FILES['Filedata']['name']) {
$uploadDir = "images/";
$uploadFile = $uploadDir . basename($_FILES['Filedata']['name']);
move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile);
}
?>

UYARI:
Burada tek değiştireceğiniz yer kırmızı ile yazılmış images kısmıdır. Bu serverınızda gönderilecek dosyanın yükleneceği klasörün ismidir. Yani bir ftp programı ile serverınıza girip burada images isimli boş bir klasör oluşturmalısınız. Hata olmaması açısından tekrarlamakta yarar var. Serverınızda oluşturduğunuz images isimli klasör ile upload işlemini yapacağınız swf ve html dosyası aynı dizinde olmalıdır. Şayet klasör farklı bir dizinde ise php dosyasına bu klasörün yolunu doğru ve tam olarak girmelisiniz.

2- Şimdi fla dosyasını inceleyelim. Kodlar üzerinde yeterli açıklama mevcuttur. Çalışmada kullanılan elemanlar:

- Gönderilecek dosyayı seçen bir buton (instance name= browse_butn)
- Gönderme işlemini yapan bir buton (instance name= upload_butn)
- Dinamik bir metin kutusu (instance name= name_txt)
- (opsiyonel) metin kutusu çevresinde rengi kodlarla düzenlenen ve yükleme yapıldıkça ilerleyen bir preload amaçlı kullanılan klip.( instance name= rec_mc)

Siz isterseniz bunun yerine ayrı bir dinamik metin kutusu kullanarak yükleme yüzdesini gösteren klasik bir preload ekleyebilirsiniz.Elemanlar yerleştirildikten sonra 1.kareye şu kodu ekleyin:

// FileReference nesnesi import ediliyor
import flash.net.FileReference;

//başlangıçta yükleme butonu fonksiyon görmüyor
upload_butn.enabled = false;

//Yeni fileReference nesnesi hazırlanıyor
var file_fr:FileReference = new FileReference();

//Bu nesne olayları için listener nesnesi oluşturuluyor
var list_obj:Object = new Object();

/*Bilgisayardan yüklenecek dosya seçimi yapıldığında
yükleme butonu aktifleşiyor ve dosya adı metin kutusuna
yazdırılıyor*/
list_obj.onSelect = function(){
upload_butn.enabled = true;
name_txt.text = file_fr.name;
}

/*Yükleme tamamlandığında;
-Metin kutusuna uyarı mesajı ekleniyor
-Renkli loader kaldırılıyor
-Gönder butonu inaktif oluyor*/
list_obj.onComplete = function(){
name_txt.text = "Dosya Yüklenmiştir";
rec_mc.clear();
upload_butn.enabled = false;
}

/* Veriler yüklenirken preloader çalıştırılıyor.Yükleme oranı metin
kutusunun çevresindeki klibin renk değişiminin ilerlemesi şeklinde
oluşturuluyor*/
list_obj.onProgress = function (bytesTotal, bytesLoaded){
var percent = bytesLoaded/file_fr.size;
drawRec(percent);
}

//Yükleme iptal edilirse uyarı mesajı yazılıyor
list_obj.onCancel = function(){
name_txt.text = "Yükleme iptal edildi";
}

//Yükleme hatası olursa hata uyarı mesajları: IQ Hatası
list_obj.onIOError = function(fileRef){
name_txt.text = "IO hatası oluştu ";
}

//Yükleme hatası olursa hata uyarı mesajları: Güvenlik Hatası
list_obj.onSecurityError = function(fileRef, error){
name_txt.text = "Güvenlik Hatası oluştu " + fileRef.name + ":" + error;
}

//Yükleme hatası olursa hata uyarı mesajları: Http Hatası
list_obj.onHTTPError = function(fileRef:FileReference, error:Number){
name_txt.text += "HTTP hatası oluştu: " + fileRef.name + ":hata #" + error;
}

//Listener atanıyor
file_fr.addListener(list_obj);

//Göster butonu kodları hazırlanıyor.Buraya istediğiniz kadar isim ve format ekleyebilirsiniz.
browse_butn.clickHandler = function(){
file_fr.browse([{description: "Resimler", extension: "*.jpg;*.gif;*.png"}, {description: "Sıkıştırılmış dosyalar", extension: "*.rar;*.zip"}, {description: "Metin Belgeleri", extension: "*.txt;*.doc;*.pdf"}]
);
}

//Yükleme butonu kodları oluşturuluyor
upload_butn.clickHandler = function(){
file_fr.upload("upload.php");
rec_mc.fillColor = Math.random()*0x1000000;
}

//Preload için klip renklendirmesi hazırlanıyor.
function drawRec (per){
rec_mc.clear();
rec_mc.lineStyle(0);
rec_mc.beginFill(rec_mc.fillColor, 70);
rec_mc.lineTo(per*rec_mc._width, 0);
rec_mc.lineTo(per*rec_mc._width, rec_mc._height);
rec_mc.lineTo(0, 30);
rec_mc.lineTo(0,0);
rec_mc.endFill();
}
//Kodların sonu

Burada önemli olan kısımlardan birisi gönderilecek dosyanın tip tayinidir. Bu alana bir ya da istediğiniz kadar eleman ekleyebilirsiniz.

file_fr.browse([{description: "Resimler", extension: "*.jpg;*.gif;*.png"}, {description: "Sıkıştırılmış dosyalar", extension: "*.rar;*.zip"}, {description: "Metin Belgeleri", extension: "*.txt;*.doc;*.pdf"}]

Biz resimler adı altında jpg,gif,png ; Sıkıştırılmış dosyalar altında zip ve rar ; Metin belgeleri adı altında txt,doc ve pdf dosyaları göndermeye programladık.

Mac için bu dizinin yazılımı farklıdır. Flash help kısmında FileReference şeklinde arama yaparsanız gerekli kodlara ulaşabilirsiniz.

Dosyayı download için tıklayınız