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.
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.
|
|
|