FileReference sınıfını kullanma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

FileReference nesnesi, istemci veya sunucu makinesinde bir veri dosyasını temsil eder. FileReference sınıfının yöntemleri, uygulamanızın yerel olarak veri dosyalarını yükleyip kaydetmesine ve uzak sunuculara ve uzak sunuculardan dosya verilerini aktarmasına olanak sağlar.

FileReference sınıfı, veri dosyalarını yüklemeye, aktarmaya ve kaydetmeye yönelik iki farklı yaklaşım sunar. Kullanıma sunulduğu günden bu yana, FileReference sınıfına browse() yöntemi, upload() yöntemi ve download() yöntemi eklenmiştir. Kullanıcının dosya seçmesini sağlamak için browse() yöntemini kullanın. Dosya verilerini uzaktaki bir sunucuya aktarmak için upload() yöntemini kullanın. Sunucudan aynı verilere ulaşmak ve yerel bir dosyaya kaydetmek için download() yöntemimi kullanın. Flash Player 10 ve Adobe AIR 1.5 ile başlandığında, FileReference sınıfına load() ve save() yöntemleri de eklenir. load() ve save() yöntemleri, yerel dosyalara doğrudan erişmenizi ve yerel dosyaları kaydetmenizi sağlar. Bu yöntemlerin kullanımı, URLLoader ve Loader sınıflarındaki eşdeğer adlara sahip yöntemlere benzerdir.

Not: FileReference sınıfını ve FileStream sınıfını genişleten File sınıfı dosyalarla ve yerel dosya sistemiyle çalışmaya yarayan ek işlevler sağlar. File ve FileStream sınıfları yalnızca AIR tarafından desteklenir ve Flash Player tarafından desteklenmez.

Adobe'nin önerdikleri

Load and Save Local Files (Yerel Dosyaları Yükleme ve Kaydetme)

Kevin Hoyt
Bu videoda Kevin Hoyt, Flash kullanımıyla yerel içeriği yükleme ve kaydetme kolaylığını açıklamaktadır.

FileReference sınıfı

Her FileReference nesnesi, yerel makinede tek bir veri dosyasını temsil eder. FileReference sınıfının özellikleri, dosyanın boyutu, türü, adı, dosya adı uzantısı, oluşturucusu, oluşturma tarihi ve değiştirme tarihi hakkında bilgileri içerir.

Not: creator özelliği yalnızca Mac OS'de desteklenmektedir. Diğer tüm platformlar null değerini döndürür.
Not: extension özelliği yalnızca Adobe AIR uygulamasında desteklenmiştir.

FileReference sınıfının bir örneğini iki şekilde oluşturabilirsiniz:

  • Şu kodda gösterildiği gibi, new operatörünü kullanın:
    import flash.net.FileReference; 
    var fileRef:FileReference = new FileReference();
  • Kullanıcının karşıya yükleme işlemi için bir veya daha fazla dosya seçmesini sağlayan bir iletişim kutusunu açan FileReferenceList.browse() yöntemini çağırın. Kullanıcı bir veya daha fazla dosyayı başarıyla seçerse, bu, FileReference nesnelerinin bir dizisini oluşturur.

Bir FileReference nesnesi oluşturduktan sonra aşağıdakileri yapabilirsiniz:

  • Kullanıcının yerel dosya sisteminden tek bir dosya seçmesini sağlayan bir iletişim kutusunu açan FileReference.browse() yöntemini çağırabilirsiniz. Bu genellikle, FileReference.upload() veya FileReference.load() yönteminin daha sonra çağırılmasından önce yapılır. Dosyayı uzaktaki bir sunucuya yüklemek için FileReference.upload() yöntemini çağırın. Yerel bir dosyayı açmak için FileReference.load() yöntemini çağırın.

  • FileReference.download() yöntemini çağırın. download() yöntemi kullanıcının yeni dosyayı kaydetmesi için bir konum seçmesini sağlayan bir iletişim kutusu açar. Daha sonra bu sunucudan verileri indirir ve yeni dosyaya kaydeder.

  • FileReference.load() yöntemini çağırın. Bu yöntem, browse() yöntemini kullanarak önceden seçilmiş olan bir dosyadan veri yüklemeye başlar. browse() işlemi tamamlanıncaya kadar (kullanıcı bir dosya seçer) load() yöntemi çağrılamaz.

  • FileReference.save() yöntemini çağırın. Bu yöntem bir iletişim kutusu açar ve kullanıcıdan yerel dosya sisteminde tek bir dosya konumu seçmesini ister. Daha sonra verileri belirtilen konuma kaydeder.

Not: Herhangi bir noktada yalnızca bir iletişim kutusu açılabildiğinden, aynı anda yalnızca bir browse() , download() veya save() eylemi gerçekleştirebilirsiniz.

FileReference nesnesinin, name , size veya modificationDate gibi özellikleri aşağıdakilerden biri gerçekleşmedikçe tanımlanmaz:

  • FileReference.browse() yöntemi veya FileReferenceList.browse() yöntemi çağrılıp kullanıcı, iletişim kutusunu kullanarak bir dosya seçinceye kadar.

  • FileReference.download() yöntemi çağrılıp kullanıcı iletişim kutusunu kullanarak yeni bir dosya konumu belirtinceye kadar.

Not: İndirme işlemi gerçekleştirilirken, indirme tamamlanmadan önce yalnızca FileReference.name özelliği doldurulur. Dosya indirildikten sonra, tüm özellikler kullanılabilir.

FileReference.browse() , FileReferenceList.browse() , FileReference.download() , FileReference.load() veya FileReference.save() yöntemlerine yapılan çağrılar çalıştırılıyorken, birçok oynatıcı olayları gönderme ve kodu çalıştırma işlemleri de dahil olmak üzere SWF dosyasını oynatmaya devam eder.

Yükleme ve indirme işlemleri için SWF dosyası, ilke dosyası tarafından belirtilen etki alanları da dahil olmak üzere yalnızca kendi etki alanındaki dosyalara erişebilir. Sunucu, yüklemeyi başlatan SWF dosyasıyla aynı etki alanında değilse, sunucuya dosyayı içeren bir ilke dosyası koymanız gerekir.

Bkz. FileReference .

Dosyalardan veri yükleme

FileReference.load() yöntemi yerel bir dosyadan belleğe veri yüklemenizi sağlar.

Not: Öncelikle kodunuzun kullanıcının yüklenecek bir dosya seçmesini sağlamak için FileReference.browse() yöntemini çağırması gerekir. Bu kısıtlama uygulama güvenlik sanal alanında Adobe AIR'de çalışan içeriğe etki etmez.

FileReference.load() yöntemi çağrıldıktan hemen sonra döndürülür, ancak yüklenen veriler kullanılabilir duruma hemen gelmez. FileReference nesnesi yükleme işleminin her adımında dinleyici yöntemlerini çağırmak için olaylar gönderir.

FileReference nesnesi, yükleme işlemi sırasında şu olayları gönderebilir.

  • open olayı ( Event.OPEN ): Yükleme işlemi başladığında gönderilir.

  • progress olayı ( ProgressEvent.PROGRESS ): Dosyadan veri baytları okundukça düzenli aralıklarla gönderilir.

  • complete olayı ( Event.COMPLETE ): Yükleme işlemi başarıyla tamamlandığında gönderilir.

  • ioError olayı ( IOErrorEvent.IO_ERROR ): Dosyadan veri açılırken veya okunurken bir girdi/çıktı hatası oluştuğundan yükleme işlemi başarısız olduğunda gönderilir.

FileReference nesnesi tamamlanmış olayı gönderdikten sonra, yüklenen verilere FileReference nesnesinin data özelliğinden ByteArray olarak erişilebilir.

Şu örnek, kullanıcıdan bir dosya seçmesinin ve sonra o dosyadaki verileri belleğe yüklemesinin nasıl istendiğini göstermektedir:

package 
{ 
     import flash.display.Sprite; 
    import flash.events.*;  
    import flash.net.FileFilter; 
    import flash.net.FileReference; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 
 
    public class FileReferenceExample1 extends Sprite 
    { 
        private var fileRef:FileReference; 
        public function FileReferenceExample1() 
        { 
            fileRef = new FileReference(); 
            fileRef.addEventListener(Event.SELECT, onFileSelected); 
            fileRef.addEventListener(Event.CANCEL, onCancel); 
            fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
                        onSecurityError); 
            var textTypeFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", 
                        "*.txt;*.rtf"); 
            fileRef.browse([textTypeFilter]); 
        } 
        public function onFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.addEventListener(Event.COMPLETE, onComplete); 
            fileRef.load(); 
        } 
 
        public function onProgress(evt:ProgressEvent):void 
        { 
            trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
 
        public function onComplete(evt:Event):void 
        { 
            trace("File was successfully loaded."); 
            trace(fileRef.data); 
        } 
 
        public function onCancel(evt:Event):void 
        { 
            trace("The browse request was canceled by the user."); 
        } 
 
        public function onIOError(evt:IOErrorEvent):void 
        { 
            trace("There was an IO Error."); 
        } 
        public function onSecurityError(evt:Event):void 
        { 
            trace("There was a security error."); 
        } 
    } 
}

Örnek kod öncelikle fileRef adlı FileReference nesnesini oluşturur ve ardından browse() yöntemini çağırır. browse() yöntemi kullanıcıdan bir dosya seçmesini isteyen bir iletişim kutusu açar. Bir dosya seçildiğinde kod, onFileSelected() yöntemini görevlendirir. Bu yöntem progress ve complete olayları için dinleyiciler ekler ve daha sonra FileReference nesnesinin load() yöntemini çağırır. Örnekteki diğer işleyici yöntemleri, yükleme işleminin ilerlemesiyle ilgili bildiri göndermek için mesajları verir. Yükleme işlemi tamamlandığında uygulama, trace() yöntemini kullanarak yüklenen dosyanın içindekileri görüntüler.

Adobe AIR'de, FileStream sınıfı bir yerel dosyadan veri okumaya yarayan ek işlev sağlar. Bkz. Dosyaları okuma ve dosyalara yazma

Yerel dosyalara veri kaydetme

FileReference.save() yöntemi yerel bir dosyaya veri kaydetmenizi sağlar. Kullanıcının, yeni bir dosya adı ve dosyanın kaydedileceği bir konum girmesini sağlayan bir iletişim kutusunu açarak başlar. Kullanıcı, dosya adını ve konumunu seçtikten sonra veriler yeni dosyaya yazılır. Dosya başarıyla kaydedildiğinde, FileReference nesnesinin özellikleri, yerel dosyanın özellikleriyle doldurulur.

Not: Kodunuzun FileReference.save() yöntemini yalnızca fare tıklatması veya tuş basışı olayı gibi bir kullanıcı olayına yanıt olarak çağırması gerekir. Aksi takdirde bir hata atılır. Bu kısıtlama uygulama güvenlik sanal alanında Adobe AIR'de çalışan içeriğe etki etmez.

FileReference.save() yöntemi, çağrıldıktan hemen sonra döndürülür. FileReference nesnesi daha sonra dosya kaydetme işleminin her adımında dinleyici yöntemlerini çağırmak için olaylar gönderir.

FileReference nesnesi, dosya kaydetme işlemi sırasında şu olayları gönderir:

  • select olayı ( Event.SELECT ): Kullanıcı, kaydedilecek yeni dosyanın konumunu ve dosya adını belirttiğinde gönderilir.

  • cancel olayı ( Event.CANCEL ): Kullanıcı, iletişim kutusunda İptal düğmesini tıklattığında gönderilir.

  • open olayı ( Event.OPEN ): Kaydetme işlemi başladığında gönderilir.

  • progress olayı ( ProgressEvent.PROGRESS ): Dosyaya veri baytları kaydedildikçe düzenli aralıklarla gönderilir.

  • complete olayı ( Event.COMPLETE ): Kaydetme işlemi başarıyla tamamlandığında gönderilir.

  • ioError olayı ( IOErrorEvent.IO_ERROR ): Dosyaya veri kaydetmeye çalışılırken bir girdi/çıktı hatası oluştuğundan kaydetme işlemi başarısız olduğunda gönderilir.

FileReference.save() yönteminin data parametresinde iletilen nesne türü, verilerin dosyaya nasıl yazılacağını belirler:

  • Bu bir String değeriyse, UTF-8 kodlamasının kullanıldığı bir metin dosyası olarak kaydedilir.

  • XML nesnesiyse, tüm biçimlendirmesi korunmuş şekilde XML biçiminde bir dosyaya yazılır.

  • ByteArray nesnesi ise, içerikleri herhangi bir dönüştürme olmadan doğrudan dosyaya yazılır.

  • Başka bir nesne olması durumunda, FileReference.save() yöntemi nesnenin toString() yöntemini çağırır ve sonuçta elde edilen String değeri bir UTF-8 metin dosyasına kaydedilir. Nesnenin toString() yöntemi çağrılamazsa, bir hata fırlatılır.

Eğer data parametresinin değeri null ise, hata fırlatılır.

Aşağıdaki kod önceki bir örneği FileReference.load() yöntemi için genişletir. Bu örnek verileri dosyadan okuduktan sonra, kullanıcıdan bir dosya adı ister ve verileri yeni bir dosyaya kaydeder:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.*;  
    import flash.net.FileFilter; 
    import flash.net.FileReference; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 
 
    public class FileReferenceExample2 extends Sprite 
    { 
        private var fileRef:FileReference; 
        public function FileReferenceExample2() 
        { 
            fileRef = new FileReference(); 
            fileRef.addEventListener(Event.SELECT, onFileSelected); 
            fileRef.addEventListener(Event.CANCEL, onCancel); 
            fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
                        onSecurityError); 
            var textTypeFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", 
                        "*.txt;*.rtf"); 
            fileRef.browse([textTypeFilter]); 
        } 
        public function onFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.addEventListener(Event.COMPLETE, onComplete); 
            fileRef.load(); 
        } 
 
        public function onProgress(evt:ProgressEvent):void 
        { 
            trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
        public function onCancel(evt:Event):void 
        { 
            trace("The browse request was canceled by the user."); 
        } 
        public function onComplete(evt:Event):void 
        { 
            trace("File was successfully loaded."); 
            fileRef.removeEventListener(Event.SELECT, onFileSelected); 
            fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.removeEventListener(Event.COMPLETE, onComplete); 
            fileRef.removeEventListener(Event.CANCEL, onCancel); 
            saveFile(); 
        } 
        public function saveFile():void 
        { 
            fileRef.addEventListener(Event.SELECT, onSaveFileSelected); 
            fileRef.save(fileRef.data,"NewFileName.txt"); 
        } 
 
        public function onSaveFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onSaveProgress); 
            fileRef.addEventListener(Event.COMPLETE, onSaveComplete); 
            fileRef.addEventListener(Event.CANCEL, onSaveCancel); 
        } 
 
        public function onSaveProgress(evt:ProgressEvent):void 
        { 
            trace("Saved " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
         
        public function onSaveComplete(evt:Event):void 
        { 
            trace("File saved."); 
            fileRef.removeEventListener(Event.SELECT, onSaveFileSelected); 
            fileRef.removeEventListener(ProgressEvent.PROGRESS, onSaveProgress); 
            fileRef.removeEventListener(Event.COMPLETE, onSaveComplete); 
            fileRef.removeEventListener(Event.CANCEL, onSaveCancel); 
        } 
 
        public function onSaveCancel(evt:Event):void 
        { 
            trace("The save request was canceled by the user."); 
        } 
 
        public function onIOError(evt:IOErrorEvent):void 
        { 
            trace("There was an IO Error."); 
        } 
        public function onSecurityError(evt:Event):void 
        { 
            trace("There was a security error."); 
        } 
    } 
}

Verilerin tamamı dosyadan yüklendiğinde kod onComplete() yöntemini çağırır. onComplete() yöntemi yükleme olayları için dinleyicileri kaldırır ve sonra saveFile() yöntemini çağırır. saveFile() yöntemi FileReference.save() yöntemini çağırır. FileReference.save() yöntemi, kullanıcının dosyanın kaydedilmesi için yeni bir dosya adı ve konumu seçmesini sağlayan yeni bir iletişim kutusu açar. Kalan olay dinleyicisi yöntemleri, dosya kaydetme işleminin tamamlanıncaya kadar ilerlemesini izler.

Adobe AIR'de, FileStream sınıfı bir yerel dosyaya veri yazmaya yarayan ek işlev sağlar. Bkz. Dosyaları okuma ve dosyalara yazma

Bir sunucuya dosyalar yükleme

Bir sunucuya dosya yüklemek için öncelikle kullanıcının bir veya daha fazla dosya seçmesine olanak sağlamak üzere browse() yöntemini çağırın. Daha sonra, FileReference.upload() yöntemi çağrıldığında, seçili dosya sunucuya aktarılır. Kullanıcı FileReferenceList.browse() yöntemini kullanarak birden çok dosya seçerse, Flash Player, seçilen dosyaların FileReferenceList.fileList adında bir dizisini oluşturur. Daha sonra dosyaların her birini ayrı ayrı yüklemek için FileReference.upload() yöntemini kullanabilirsiniz.

Not: FileReference.browse() yönteminin kullanılması yalnızca tekli dosyalar yüklemenize olanak sağlar. Kullanıcının birden çok dosya yüklemesini sağlamak için, FileReferenceList.browse() yöntemini kullanın.

Varsayılan olarak, sistem dosyası seçicisi iletişim kutusu, kullanıcıların yerel bilgisayardan herhangi türde bir dosya seçmesine olanak sağlar. Geliştiriciler, FileFilter sınıfını kullanıp dosya filtresi örneklerinin bir dizisini browse() yöntemine ileterek bir veya daha fazla özel dosya türü filtresi belirtebilir:

var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png"); 
var textTypes:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", "*.txt; *.rtf"); 
var allTypes:Array = new Array(imageTypes, textTypes); 
var fileRef:FileReference = new FileReference(); 
fileRef.browse(allTypes);

Kullanıcı, sistem dosyası seçicisinde dosyaları seçip Aç düğmesini tıklattığında, Event.SELECT olayı gönderilir. Yüklenecek dosyayı seçmek için FileReference.browse() yöntemi kullanılırsa, aşağıdaki kod, dosyayı web sunucusuna gönderir.

var fileRef:FileReference = new FileReference(); 
fileRef.addEventListener(Event.SELECT, selectHandler); 
fileRef.addEventListener(Event.COMPLETE, completeHandler); 
try 
{ 
    var success:Boolean = fileRef.browse(); 
} 
catch (error:Error) 
{ 
    trace("Unable to browse for files."); 
} 
function selectHandler(event:Event):void 
{ 
    var request:URLRequest = new URLRequest("http://www.[yourdomain].com/fileUploadScript.cfm") 
    try 
    { 
        fileRef.upload(request); 
    } 
    catch (error:Error) 
    { 
        trace("Unable to upload file."); 
    } 
} 
function completeHandler(event:Event):void 
{ 
    trace("uploaded"); 
}
POST veya GET yöntemlerini kullanarak değişkenler göndermek için URLRequest.method ve URLRequest.data özelliklerini kullanarak FileReference.upload() yöntemiyle sunucuya veri gönderebilirsiniz.

FileReference.upload() yöntemini kullanarak bir dosyayı yüklemeyi denediğinizde, aşağıdaki olaylar gönderilir:

  • open olayı ( Event.OPEN ): Yükleme işlemi başladığında gönderilir.

  • progress olayı ( ProgressEvent.PROGRESS ): Dosyadan veri baytları karşıya yüklendikçe düzenli aralıklarla gönderilir.

  • complete olayı ( Event.COMPLETE ): Yükleme işlemi başarıyla tamamlandığında gönderilir.

  • httpStatus olayı ( HTTPStatusEvent.HTTP_STATUS ): Bir HTTP hatası nedeniyle karşıya yükleme işlemi başarısız olduğunda gönderilir.

  • httpResponseStatus olayı ( HTTPStatusEvent.HTTP_RESPONSE_STATUS ): upload() veya uploadUnencoded() yöntemine yapılan bir çağrı HTTP üzerinden verilere erişmeye çalışıyorsa ve Adobe AIR, istek için durum kodunu algılayıp döndürebiliyorsa gönderilir.

  • securityError olayı ( SecurityErrorEvent.SECURITY_ERROR ): Güvenlik ihlali nedeniyle karşıya yükleme işlemi başarısız olduğunda gönderilir.

  • uploadCompleteData olayı ( DataEvent.UPLOAD_COMPLETE_DATA ): Başarılı bir karşıya yükleme işleminin ardından sunucudan veri alındıktan sonra gönderilir.

  • ioError olayı ( IOErrorEvent.IO_ERROR ): Aşağıdaki nedenlerden herhangi birinden dolayı karşıya yükleme işlemi başarısız olduğunda gönderilir:

    • Flash Player dosya okuma, yazma veya iletme işlemi yaparken girdi/çıktı hatası oluştuğunda.

    • SWF, kimlik doğrulaması (örn. kullanıcı adı ve şifre) gerektiren bir sunucuya dosya yüklemeye çalıştığında. Yükleme sırasında, Flash Player kullanıcıların şifre girmesi için bir araç sağlamadığında.

    • url parametresi geçersiz bir protokol içerdiğinde. FileReference.upload() yönteminin, HTTP veya HTTPS kullanması gerektiğinde.

Flash Player, kimlik doğrulaması gerektiren sunucular için tam destek sunmaz. Yalnızca tarayıcı eklentisi veya Microsoft ActiveX® denetimi kullanan bir tarayıcıda çalışan SWF dosyaları, kullanıcıdan kimlik doğrulaması için ve daha sonra da indirme işlemi için kullanıcı adı ve şifre girmesini istemek üzere bir iletişim kutusu sağlayabilir. Eklenti veya ActiveX denetimi kullanılarak yapılan yüklemeler ya da bağımsız veya harici oynatıcı kullanılarak yapılan yükleme/indirme işlemleri için dosya aktarımı başarısız olur.

Flash Player uygulamasından bir dosya yükleme işlemini kabul etmek üzere ColdFusion'da sunucu komut dosyası oluşturmak için, aşağıdakine benzer kodu kullanabilirsiniz:

<cffile action="upload" filefield="Filedata" destination="#ExpandPath('./')#" nameconflict="OVERWRITE" />

Bu ColdFusion kodu, Flash Player tarafından gönderilen dosyayı yükleyip ColdFusion şablonuyla aynı dizine kaydederek aynı ada sahip dosyanın üzerine yazar. Önceki kod, dosya yüklemesini kabul etmek için gerekli minimum kod miktarını gösterir; bu komut dosyasının üretim ortamında kullanılmaması gerekir. Kullanıcıların yalnızca kabul edilen dosya türlerini (örn. tehlikeli olabilecek bir sunucu tarafı komut dosyası yerine bir görüntü) yüklediğinden emin olmak için veri doğrulaması eklemek idealdir.

Aşağıdaki kod, PHP kullanarak dosya yüklemelerini gösterir ve veri doğrulaması içerir. Komut dosyası, yükleme dizininde yüklenmiş dosyaların sayısını 10 olarak sınırlar, dosyanın 200 KB'tan küçük olduğundan emin olur ve yalnızca JPEG, GIF veya PNG dosyalarının dosya sistemine yüklenip kaydedilmesine izin verir.

<?php 
$MAXIMUM_FILESIZE = 1024 * 200; // 200KB 
$MAXIMUM_FILE_COUNT = 10; // keep maximum 10 files on server 
echo exif_imagetype($_FILES['Filedata']); 
if ($_FILES['Filedata']['size'] <= $MAXIMUM_FILESIZE) 
{ 
    move_uploaded_file($_FILES['Filedata']['tmp_name'], "./temporary/".$_FILES['Filedata']['name']); 
    $type = exif_imagetype("./temporary/".$_FILES['Filedata']['name']); 
    if ($type == 1 || $type == 2 || $type == 3) 
    { 
        rename("./temporary/".$_FILES['Filedata']['name'], "./images/".$_FILES['Filedata']['name']); 
    } 
    else 
    { 
        unlink("./temporary/".$_FILES['Filedata']['name']); 
    } 
} 
$directory = opendir('./images/'); 
$files = array(); 
while ($file = readdir($directory)) 
{ 
    array_push($files, array('./images/'.$file, filectime('./images/'.$file))); 
} 
usort($files, sorter); 
if (count($files) > $MAXIMUM_FILE_COUNT) 
{ 
    $files_to_delete = array_splice($files, 0, count($files) - $MAXIMUM_FILE_COUNT); 
    for ($i = 0; $i < count($files_to_delete); $i++) 
    { 
        unlink($files_to_delete[$i][0]); 
    } 
} 
print_r($files); 
closedir($directory); 
 
function sorter($a, $b) 
{ 
    if ($a[1] == $b[1]) 
    { 
        return 0; 
    } 
    else 
    { 
        return ($a[1] < $b[1]) ? -1 : 1; 
    } 
} 
?>

POST veya GET istek yöntemini kullanarak yükleme komut dosyasına ek değişkenler iletebilirsiniz. Yükleme komut dosyanıza ek POST değişkenler göndermek için, aşağıdaki kodu kullanabilirsiniz:

var fileRef:FileReference = new FileReference(); 
fileRef.addEventListener(Event.SELECT, selectHandler); 
fileRef.addEventListener(Event.COMPLETE, completeHandler); 
fileRef.browse(); 
function selectHandler(event:Event):void 
{ 
    var params:URLVariables = new URLVariables(); 
    params.date = new Date(); 
    params.ssid = "94103-1394-2345"; 
    var request:URLRequest = new URLRequest("http://www.yourdomain.com/FileReferenceUpload/fileupload.cfm"); 
    request.method = URLRequestMethod.POST; 
    request.data = params; 
    fileRef.upload(request, "Custom1"); 
} 
function completeHandler(event:Event):void 
{ 
    trace("uploaded"); 
}

Önceki örnek, uzak sunucu tarafı komut dosyasına ileteceğiniz yeni bir URLVariables nesnesi oluşturur. Önceki ActionScript sürümlerinde, sorgu dizesindeki değerleri ileterek, sunucu yükleme komut dosyasına değişkenleri iletebiliyordunuz. ActionScript 3.0, POST veya GET yöntemini kullanarak veri iletmenize olanak sağlayan bir URLRequest nesnesini kullanarak uzak komut dosyasına değişkenler iletmenizi sağlar; bu da daha büyük veri kümelerinin iletilmesini daha kolay ve net duruma getirir. Değişkenlerin GET veya POST istek yöntemi kullanılarak iletilip iletilmediğini belirmek için, URLRequest.method özelliğini sırayla URLRequestMethod.GET veya URLRequestMethod.POST olarak ayarlayabilirsiniz

ActionScript 3.0, ayrıca önceki örnekte ( Filedata varsayılan değerini Custom1 olarak değiştiren) gösterildiği gibi, upload() yöntemine ikinci bir parametre sağlayarak varsayılan Filedata yükleme dosyası alan adını da geçersiz kılmanıza olanak sağlar.

upload() yöntemine üçüncü parametre olarak true değeri iletip bu varsayılanı geçersiz kılabilseniz de, varsayılan olarak Flash Player test yüklemesi göndermeyi denemez. Test yüklemesinin amacı, gerçek dosya yüklemesinin ve gerekiyorsa sunucu kimlik doğrulamasının başarılı olup olmayacağını kontrol etmektir.

Not: Test yüklemesi şu anda yalnızca Windows tabanlı Flash Player uygulamalarında gerçekleşir.

Dosya yüklemeyi işleyen sunucu komut dosyasının, aşağıdaki öğeleri içeren bir HTTP POST isteğini beklemesi gerekir:

  • multipart/form-data değerine sahip Content-Type

  • name niteliği “ Filedata ” öğesine ve filename niteliği orijinal dosyanın adına ayarlanmış şekilde Content-Disposition . FileReference.upload() yönteminde uploadDataFieldName parametresi için bir değer ileterek özel bir name niteliği belirtebilirsiniz.

  • Dosyanın ikili içeriği.

Aşağıda örnek bir HTTP POST isteği verilmiştir:

POST /handler.asp HTTP/1.1 
Accept: text/* 
Content-Type: multipart/form-data; 
boundary=----------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
User-Agent: Shockwave Flash 
Host: www.mydomain.com 
Content-Length: 421 
Connection: Keep-Alive 
Cache-Control: no-cache 
 
------------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6  
Content-Disposition: form-data; name="Filename" 
 
sushi.jpg  
------------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
Content-Disposition: form-data; name="Filedata"; filename="sushi.jpg" 
Content-Type: application/octet-stream 
 
Test File  
------------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
Content-Disposition: form-data; name="Upload" 
 
Submit Query 
------------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
(actual file data,,,)

Aşağıdaki örnek HTTP POST isteği, api_sig , api_key ve auth_token olmak üzere üç POST değişkeni gönderir ve özel bir "photo" yükleme verisi alan adı değerini kullanır:

POST /handler.asp HTTP/1.1 
Accept: text/* 
Content-Type: multipart/form-data; 
boundary=----------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
User-Agent: Shockwave Flash 
Host: www.mydomain.com 
Content-Length: 421 
Connection: Keep-Alive 
Cache-Control: no-cache 
 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="Filename" 
 
sushi.jpg 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="api_sig" 
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="api_key" 
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="auth_token" 
 
XXXXXXXXXXXXXXXXXXXXXXX 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="photo"; filename="sushi.jpg" 
Content-Type: application/octet-stream 
 
(actual file data,,,) 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
Content-Disposition: form-data; name="Upload" 
 
Submit Query 
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--

Sunucudan dosyaları indirme

Kullanıcıların request ve defaultFileName olmak üzere iki parametre alan FileReference.download() yöntemini kullanarak bir sunucudan dosya indirmesine olanak sağlayabilirsiniz. Birinci parametre, indirilecek dosyanın URL'sini içeren URLRequest nesnesidir. İkinci parametre isteğe bağlı olup dosya indirme iletişim kutusunda görüntülenen varsayılan bir dosya adı belirtmenizi sağlar. İkinci parametreyi ( defaultFileName ) çıkarırsanız, belirtilen URL'deki dosya adı kullanılır.

Aşağıdaki kod, SWF belgesiyle aynı dizinden index.xml adındaki bir dosyayı indirir:

var request:URLRequest = new URLRequest("index.xml"); 
var fileRef:FileReference = new FileReference(); 
fileRef.download(request);

Varsayılan adı index.xml yerine currentnews.xml olarak ayarlamak için, aşağıdaki kod parçasının gösterdiği gibi, defaultFileName parametresini belirtin:

var request:URLRequest = new URLRequest("index.xml"); 
var fileToDownload:FileReference = new FileReference(); 
fileToDownload.download(request, "currentnews.xml");

Sunucunun dosya adı kullanışlı değilse veya sunucu tarafından geliştirilmediyse bir dosyayı yeni bir isim vermek faydalı olabilir. Dosyayı doğrudan indirmek yerine sunucu tarafı komut dosyası kullanarak indirdiğinizde, defaultFileName parametresini açıkça belirtmeniz de iyi olur. Örneğin, kendisine iletilen URL değişkenlerini esas alarak belirli dosyaları indiren sunucu tarafı komut dosyanız varsa, defaultFileName parametresini belirtmeniz gerekir. Aksi takdirde, indirilen dosyanın varsayılan adı, sunucu tarafı komut dosyanızın adıdır.

Ayrıştırılacak sunucu komut dosyasının URL'sine parametreler ekleyip download() yöntemi kullanılarak veriler sunucuya gönderilebilir. Aşağıdaki ActionScript 3.0 komut parçası, ColdFusion komut dosyasına iletilen parametreleri esas alarak bir belgeyi indirir:

package 
{ 
    import flash.display.Sprite; 
    import flash.net.FileReference; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
    import flash.net.URLVariables; 
 
    public class DownloadFileExample extends Sprite 
    { 
        private var fileToDownload:FileReference; 
        public function DownloadFileExample() 
        { 
            var request:URLRequest = new URLRequest(); 
            request.url = "http://www.[yourdomain].com/downloadfile.cfm"; 
            request.method = URLRequestMethod.GET; 
            request.data = new URLVariables("id=2"); 
            fileToDownload = new FileReference(); 
            try 
            { 
                fileToDownload.download(request, "file2.txt"); 
            } 
            catch (error:Error) 
            { 
                trace("Unable to download file."); 
            } 
        } 
    } 
}

Aşağıdaki kod, URL değişkeninin değerine bağlı olarak sunucudan iki dosyadan birini indiren download.cfm ColdFusion komut dosyasını gösterir:

<cfparam name="URL.id" default="1" /> 
<cfswitch expression="#URL.id#"> 
    <cfcase value="2"> 
        <cfcontent type="text/plain" file="#ExpandPath('two.txt')#" deletefile="No" /> 
    </cfcase> 
    <cfdefaultcase> 
        <cfcontent type="text/plain" file="#ExpandPath('one.txt')#" deletefile="No" /> 
    </cfdefaultcase> 
</cfswitch>

FileReferenceList sınıfı

FileReferenceList sınıfı, kullanıcının sunucu tarafı komut dosyasına yüklemek üzere bir veya daha çok dosya seçmesine olanak sağlar. Dosya yükleme, kullanıcının seçtiği her dosyada çağrılması gereken FileReference.upload() yöntemi tarafından işlenir.

Aşağıdaki kod, iki FileFilter nesnesi ( imageFilter ve textFilter ) oluşturur ve bunları bir dizide FileReferenceList.browse() yöntemine iletir. Bu da, işletim sistemi dosyası iletişim kutusunun dosya türleri için iki olası filtre görüntülemesine neden olur.

var imageFilter:FileFilter = new FileFilter("Image Files (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png"); 
var textFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", "*.txt; *.rtf"); 
var fileRefList:FileReferenceList = new FileReferenceList(); 
try 
{ 
    var success:Boolean = fileRefList.browse(new Array(imageFilter, textFilter)); 
} 
catch (error:Error)  
{ 
    trace("Unable to browse for files."); 
}

FileReferenceList birden çok dosya seçmenize olanak verse de, FileReferenceList sınıfı kullanılarak kullanıcının bir veya daha fazla dosyayı seçip yüklemesine olanak sağlanması, dosya seçmek için FileReference.browse() öğesinin kullanılmasıyla aynıdır. Birden çok dosya yüklemek için aşağıdaki kodun gösterdiği gibi FileReference.upload() öğesini kullanarak seçilen dosyaların her birini yüklemeniz gerekir:

var fileRefList:FileReferenceList = new FileReferenceList(); 
fileRefList.addEventListener(Event.SELECT, selectHandler); 
fileRefList.browse(); 
 
function selectHandler(event:Event):void 
{ 
    var request:URLRequest = new URLRequest("http://www.[yourdomain].com/fileUploadScript.cfm"); 
    var file:FileReference; 
    var files:FileReferenceList = FileReferenceList(event.target); 
    var selectedFileArray:Array = files.fileList; 
    for (var i:uint = 0; i < selectedFileArray.length; i++) 
    { 
        file = FileReference(selectedFileArray[i]); 
        file.addEventListener(Event.COMPLETE, completeHandler); 
        try 
        { 
            file.upload(request); 
        } 
        catch (error:Error) 
        { 
            trace("Unable to upload files."); 
        } 
    } 
} 
function completeHandler(event:Event):void 
{ 
    trace("uploaded"); 
}

Dizideki FileReference nesnelerinin her birine Event.COMPLETE olayı eklendiğinden, Flash Player uygulaması her bir dosyanın yüklemesi bitince completeHandler() yöntemini çağırır.