FileReference sınıfını kullanmaFlash 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ınaload() 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.
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:
Bir FileReference nesnesi oluşturduktan sonra aşağıdakileri yapabilirsiniz:
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:
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üklemeFileReference.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.
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 kaydetmeFileReference.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:
FileReference.save() yönteminin data parametresinde iletilen nesne türü, verilerin dosyaya nasıl yazılacağını belirler:
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öntemiFileReference.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üklemeBir 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:
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:
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ı indirmeKullanı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. |
|