De FileReference-klasse gebruikenFlash Player 9 of hoger, Adobe AIR 1.0 of hoger Een FileReference-object vertegenwoordigt een gegevensbestand op een client- of servercomputer. Met de methoden van de klasse FileReference kan uw toepassing gegevensbestanden lokaal laden en opslaan, en bestandsgegevens van en naar externe servers overbrengen. De klasse FileReference biedt twee verschillende benaderingen om gegevensbestanden te laden, over te brengen en op te slaan. Sinds de introductie van de klasse FileReference bevat deze klasse de methode browse(), de methode upload() en de methode download(). Gebruik de methode browse() om de gebruiker een bestand te laten selecteren. Gebruik de methode upload() om bestandsgegevens naar een externe server over te brengen. Gebruik de methode download() om die gegevens weer van de server op te halen en ze in een lokaal bestand op te slaan. Vanaf Flash Player 10 en Adobe AIR 1.5 bevat de klasse FileReference eveneens de methoden load() en save(). Met de methoden load() en save() hebt u rechtstreeks toegang tot lokale bestanden en kunt u deze eveneens opslaan. U gebruikt deze methoden op dezelfde manier als de gelijknamige methoden in de klassen URLLoader en Loader. Opmerking: De File-klasse, die de FileReference-klasse bevat, en de FileStream-klasse bieden extra functies voor het werken met bestanden en het lokale bestandssysteem. De File- en FileStream-klassen worden alleen ondersteund in AIR en niet in Flash Player.
De klasse FileReferenceElk FileReference-object vertegenwoordigt één gegevensbestand op de lokale machine. De eigenschappen van de FileReference-klasse bevat informatie over de grootte, type, naam, bestandsnaam, bestandsextensie, auteur, aanmaakdatum en aanpassingsdatum van het bestand. Opmerking: De eigenschap creator wordt alleen in Mac OS ondersteund. Op alle andere platformen wordt null geretourneerd.
Opmerking: De eigenschap extension wordt alleen in Adobe AIR ondersteund.
U kunt op twee manieren een instantie van de klasse FileReference maken:
Wanneer u een FileReference-object hebt gemaakt, kunt u het volgende doen:
Opmerking: U kunt maar één browse()-, download()- of save()-actie tegelijk uitvoeren, aangezien er maar één dialoogvenster tegelijk kan zijn geopend.
De eigenschappen van het FileReference-object, zoals name, size en modificationDate, worden pas in een van de volgende omstandigheden gedefinieerd:
Opmerking: Wanneer een bestand wordt gedownload, wordt alleen de eigenschap FileReference.name met gegevens gevuld voordat de download is voltooid. Nadat het bestand is gedownload, zijn alle andere eigenschappen beschikbaar.
Terwijl oproepen van de methoden FileReference.browse(), FileReferenceList.browse(), FileReference.download(), FileReference.load() of FileReference.save() worden uitgevoerd, gaan de meeste spelers door met het afspelen van SWF-bestanden, waaronder het verzenden van gebeurtenissen en het uitvoeren van code. Voor het uploaden en downloaden heeft een SWF-bestand alleen toegang tot bestanden binnen het eigen domein, inclusief alle domeinen die door een beleidsbestand zijn opgegeven. U moet een beleidsbestand plaatsen op de server die het bestand bevat als de server zich niet in hetzelfde domein bevindt als het SWF-bestand dat de upload of download heeft gestart. Zie FileReference. Gegevens uit bestanden ladenMet de methode FileReference.load() kunt u gegevens uit een lokaal bestand in het geheugen laden. Opmerking: De code moet eerst de methode FileReference.browse() aanroepen opdat de gebruiker het te laden bestand kan selecteren. Deze beperking is niet van toepassing op inhoud die wordt uitgevoerd in Adobe AIR in de beveiligingssandbox van de toepassing.
De methode FileReference.load() keert onmiddellijk terug nadat deze is aangeroepen, maar de te laden gegevens zijn niet onmiddellijk beschikbaar. Het FileReference-object verzendt gebeurtenissen om listenermethoden te activeren bij elke stap van het laadproces. Het FileReference-object verzendt tijdens het laadproces de volgende gebeurtenissen.
Zodra het FileReference-object de volledige gebeurtenis heeft verzonden, kunnen de geladen gegevens worden benaderd als een ByteArray in de eigenschap data van het FileReference-object. In het volgende voorbeeld ziet u hoe de gebruiker wordt gevraagd een bestand te selecteren en hoe de gegevens vervolgens uit dat bestand in het geheugen worden geladen: 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."); } } } In de voorbeeldcode wordt eerst een FileReference-object met de naam fileRef gemaakt, en daarna wordt de methode browse() van dit object aangeroepen. De browse()-methode opent een dialoogvenster die de gebruiker vraagt om een bestand te selecteren. Als een bestand is geselecteerd wordt de methode onFileSelected() door de code aangeroepen. Deze methode voegt listeners voor de gebeurtenissen progress en complete toe en roept vervolgens de methode load() van het FileReference-object aan. De andere handlermethoden in het voorbeeld genereren alleen berichten om te rapporteren over de voortgang van de laadbewerking. Wanneer het laden is voltooid, geeft de toepassing de inhoud van het geladen bestand weer met behulp van de methode trace(). In Adobe AIR, biedt de FileStream-klasse een aanvullende functionaliteit voor het lezen van gegevens van een lokaal bestand. Zie Lezen van en schrijven naar bestanden. Gegevens opslaan in lokale bestandenMet de methode FileReference.save() kunt u gegevens opslaan in een lokaal bestand. Deze methode begint met het openen van een dialoogvenster waarin de gebruiker een nieuwe bestandsnaam en de locatie kan opgeven waar het bestand moet worden opgeslagen. Nadat de gebruiker de bestandsnaam en -locatie heeft geselecteerd, worden de gegevens naar het nieuwe bestand geschreven. Wanneer het bestand is opgeslagen, worden de eigenschappen van het object FileReference gevuld met de eigenschappen van het lokale bestand. Opmerking: Uw code kan alleen de FileReference.save()-methode aanroepen als reactie op een gebeurtenis die door een gebruiker is gestart, zoals een muisklik of een actie op het toetsenbord. Anders wordt een fout gegenereerd. Deze beperking is niet van toepassing op actieve inhoud in Adobe AIR in de beveiligingssandbox van de toepassing.
De methode FileReference.save() retourneert onmiddellijk na de oproep. Het FileReference-object verzendt vervolgens gebeurtenissen om listenermethoden te activeren bij elke stap van het opslagproces. Het FileReference-object verzendt de volgende gebeurtenissen tijdens het opslagproces:
Het type object dat in de parameter data van de methode FileReference.save() wordt doorgegeven, bepaalt hoe de gegevens naar het bestand worden geschreven:
Als de parameter data de waarde null heeft, wordt een fout gegenereerd. De volgende code is een uitbreiding op het vorige voorbeeld van de methode FileReference.load(). Nadat de gegevens uit het bestand zijn gelezen, wordt de gebruiker in het voorbeeld naar een bestandsnaam gevraagd en worden de gegevens in een nieuw bestand opgeslagen: 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."); } } } Wanneer alle gegevens uit het bestand geladen zijn, wordt de methode onComplete() door de code aangeroepen. De methode onComplete() verwijdert de listeners voor de laadgebeurtenissen en roept vervolgens de methode saveFile() op. De methode FileReference.save() wordt door de methode saveFile() aangeroepen. Er wordt door de methode FileReference.save() een nieuw dialoogvenster geopend waarin de gebruiker een nieuwe bestandsnaam en -locatie kan selecteren om het bestand op te slaan. De overige gebeurtenislistenermethoden volgen de voortgang van het opslagproces tot het is voltooid. In Adobe AIR, biedt de FileStream-klasse extra functionaliteit voor het schrijven van gegevens naar een lokaal bestand. Zie Lezen van en schrijven naar bestanden. Bestanden uploaden naar een serverAls u bestanden wilt uploaden naar een server, roept u eerst de methode browse() aan, waarmee de gebruiker een of meer bestanden kan selecteren. Wanneer vervolgens de methode FileReference.upload() wordt aangeroepen, wordt het geselecteerde bestand overgebracht naar de server. Als de gebruiker meerdere bestanden selecteert met de methode FileReferenceList.browse(), maakt Flash Player een array met de geselecteerde bestanden, met de naam FileReferenceList.fileList. U kunt vervolgens elk bestand afzonderlijk uploaden met de methode FileReference.upload(). Opmerking: Met de methode FileReference.browse() kan slechts één bestand worden geüpload. Als u wilt dat de gebruiker meerdere bestanden kan uploaden, moet u de methode FileReferenceList.browse() gebruiken.
In het dialoogvenster met de bestandskiezer van het besturingssysteem kunnen gebruikers standaard elk bestandstype op de lokale computer selecteren. Ontwikkelaars kunnen een of meer aangepaste bestandstypefilters opgeven door de klasse FileFilter te gebruiken en een array met bestandsfilterinstanties door te geven aan de methode browse(): 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); Nadat de gebruiker de bestanden heeft geselecteerd en op de knop Openen in de bestandskiezer heeft geklikt, wordt de gebeurtenis Event.SELECT verzonden. Als de methode FileReference.browse() wordt gebruikt om een bestand voor het uploaden te selecteren, wordt het bestand door de volgende code naar een webserver verzonden: 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"); } ![]() Wanneer u probeert om een bestand te laden met de FileReference.upload()-methode, worden de volgende gebeurtenissen verzonden:
![]() Als u in ColdFusion een serverscript maakt dat een bestandsupload van Flash Player accepteert, kunt u code gebruiken zoals hier beschreven: <cffile action="upload" filefield="Filedata" destination="#ExpandPath('./')#" nameconflict="OVERWRITE" /> Deze ColdFusion-code uploadt het bestand dat door Flash Player is verzonden en slaat het op in dezelfde map als de ColdFusion-sjabloon. Als er een bestand met dezelfde naam aanwezig is, wordt dit overschreven. De voorgaande code bevat de minimale code die nodig is om een bestandsupload te accepteren. Dit script moet niet worden gebruikt in een productie-omgeving. U kunt het beste gegevensvalidatie toevoegen zodat gebruikers alleen geaccepteerde bestandstypen kunnen uploaden, zoals een afbeelding in plaats van een potentieel gevaarlijk serverscript. De volgende code bevat een voorbeeld van een bestandsupload met PHP en bevat gegevensvalidatie. Het script beperkt het aantal geüploade bestanden in de uploadmap tot 10, controleert of het bestand kleiner is dan 200 kB en staat alleen toe dat JPEG-, GIF- of PNG-bestanden worden geüpload naar en opgeslagen op het bestandssysteem. <?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; } } ?> U kunt aanvullende variabelen doorgeven aan het uploadscript met de aanvraagmethode POST of GET. Als u aanvullende POST-variabelen naar het uploadscript wilt verzenden, kunt u de volgende code gebruiken: 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"); } In het voorgaande voorbeeld wordt een URLVariables-object gemaakt dat u doorgeeft aan het externe serverscript. In vorige versies van ActionScript kon u variabelen doorgeven aan het serveruploadscript door waarden door te geven in de queryreeks. In ActionScript 3.0 kunt u variabelen aan het externe script doorgeven met een object URLRequest, zodat u gegevens kunt doorgeven met de methode POST of GET. Hiermee kunnen grotere hoeveelheden gegevens gemakkelijker worden doorgegeven. Als u wilt opgeven of de variabelen worden doorgegeven met de aanvraagmethode GET of POST, stelt u de eigenschap URLRequest.method in op respectievelijk URLRequestMethod.GET of URLRequestMethod.POST. In ActionScript 3.0 kunt u de standaardveldnaam voor uploadbestanden Filedata overschrijven door een tweede parameter door te geven aan de methode upload(), zoals in het volgende voorbeeld wordt getoond (waarin de standaardwaarde Filedata wordt vervangen door Custom1). De Flash Player probeert standaard geen testupload te verzenden, hoewel u deze standaard kan negeren door een waarde van true te passeren als de derde parameter van de upload()-methode. Het doel van de testupload is te controleren of de daadwerkelijke bestandsupload en de serververificatie, indien vereist, zal slagen. Opmerking: Momenteel vindt een testupload alleen plaats in Flash Player voor Windows.
Het serverscript dat de bestandsupload afhandelt, moet een HTTP POST-aanvraag verwachten met de volgende elementen:
Hier volgt een voorbeeld van een HTTP POST-aanvraag: 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,,,) Met het volgende voorbeeld van een HTTP POST-aanvraag worden drie POST-variabelen verzonden: api_sig, api_key en auth_token, en wordt de aangepaste veldnaamwaarde voor uploadgegevens "foto" gebruikt: 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-- Bestanden downloaden vanaf een serverU kunt gebruikers bestanden laten downloaden vanaf een server met behulp van de methode FileReference.download(), die twee parameters gebruikt: request en defaultFileName. De eerste parameter is het object URLRequest dat de URL van het te downloaden bestand bevat. De tweede parameter is optioneel. Hiermee kunt u een standaardbestandsnaam opgeven die wordt weergegeven in het downloaddialoogvenster. Als u de tweede parameter weglaat, wordt defaultFileName gebruikt. Dit is de bestandsnaam uit de opgegeven URL. Door de volgende code wordt een bestand met de naam index.xml gedownload uit dezelfde map als het SWF-document: var request:URLRequest = new URLRequest("index.xml"); var fileRef:FileReference = new FileReference(); fileRef.download(request); Als u de standaardnaam wilt instellen op currentnews.xml in plaats van index.xml, geeft u de parameter defaultFileName op, zoals in het volgende codefragment: var request:URLRequest = new URLRequest("index.xml"); var fileToDownload:FileReference = new FileReference(); fileToDownload.download(request, "currentnews.xml"); De naam van een bestand wijzigen kan nuttig zijn als de bestandsnaam op de server niet intuïtief is of door de server is gegenereerd. Het is ook raadzaam de parameter defaultFileName expliciet op te geven wanneer u een bestand downloadt met een serverscript in plaats van het bestand rechtstreeks te downloaden. U moet de parameter defaultFileName bijvoorbeeld opgeven als u een serverscript gebruikt dat specifieke bestanden downloadt op basis van doorgegeven URL-variabelen. Doet u dat niet, dan is de standaardnaam van het gedownloade bestand de naam van het serverscript. U kunt gegevens naar de server verzenden met de methode download() door parameters aan de URL toe te voegen die het serverscript kan parseren. Het volgende ActionScript 3.0-fragment downloadt een document op basis waarvan parameters worden doorgegeven aan een ColdFusion-script: 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."); } } } } In de volgende code ziet u het ColdFusion-script, download.cfm, dat een van twee bestanden downloadt van de server, afhankelijk van de waarde van een URL-variabele: <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> De klasse FileReferenceListMet de klasse FileReferenceList kan de gebruiker een of meer bestanden selecteren die naar een serverscript worden geüpload. De bestandsupload wordt afgehandeld door de methode FileReference.upload(), die moet worden aangeroepen voor elk bestand dat de gebruiker selecteert. De volgende code maakt twee objecten FileFilter (imageFilter en textFilter) en geeft ze in een array door aan de methode FileReferenceList.browse(). Dit zorgt ervoor dat het bestandsdialoogvenster van het besturingssysteem twee mogelijke filters voor bestandstypen weergeeft. 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."); } Als u wilt dat de gebruiker een of meer bestanden kan selecteren en uploaden met de klasse FileReferenceList, staat dat gelijk aan het gebruik van FileReference.browse() voor het selecteren van bestanden. Met FileReferenceList kunnen echter meerdere bestanden worden geselecteerd. Voor het uploaden van meerdere bestanden moet u elk van de geselecteerde bestanden uploaden met behulp van FileReference.upload(), zoals in de volgende code: 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"); } Aangezien de gebeurtenis Event.COMPLETE wordt toegevoegd aan elk afzonderlijk FileReference-object in de array, roept Flash Player de methode completeHandler() aan nadat elk afzonderlijk bestand is geüpload. |
![]() |