Hurtig Tips Last ned filer via SWFs ved hjelp av FileReference

Denne Quick Tip dekker hvordan du bruker AS3s FileReference klasse for å laste ned og lagre eksterne filer fra Flash RIA uten behov for server side skript som PHP. Alt vi trenger er banen til filen som vi vil la brukeren laste ned.


Endelig resultatforhåndsvisning

La oss se på det endelige resultatet vi vil jobbe for:


Trinn 1: Opprett en ny ActionScript 3.0-fil

Opprett en ny .fla-fil og lagre den i prosjektmappen din.


Trinn 2: Klargjøre brukergrensesnittet

For denne Quick Tip skapte jeg et grensesnitt. Du kan laste den ned fra linken øverst på siden, eller du kan lage din egen.

I min .fla-fil er det tre bilder som representerer filtyper og tre nedlastningsknapper som er Filmklipp objekter

  • btn_img_download for miki-monk.jpg filen
  • btn_mp3_download for filen some-audio.mp3
  • btn_txt_download for dummy-text.rtf filen

og en fremdriftslinje nederst for å spore nedlastingsfremgangen som er lagt på scenen.


Trinn 3: Opprett dokumentklasse

Vi vil skrive vår kode i en Dokument Class-fil. Hvis du ikke er kjent med Document Class, kan du få relatert informasjon fra en annen ActiveTuts + Quick Tip.

La oss lage vår Document Class-fil; klikk Fil> Ny og velg "ActionScript 3.0 Class. Lagre AS-filen på samme sted som din .fla-fil.

Koble din .fla-fil til handlingsskriptfilen du opprettet - skriv bare navnet på AS-filen din i det relaterte feltet i .fla-filen.


Trinn 4: Bruke FileReference () i vår kode

Her er dokumentklassen som jeg brukte i denne Quick Tip. Vennligst les kommentarene i koden for å forstå klassens oppførsel.

 pakke import flash.display.MovieClip; importer flash.display.Sprite; importer flash.events.MouseEvent; importer flash.events.ProgressEvent; importer flash.net.FileReference; importere flash.net.URLRequest; importer flash.text.TextField; importere flash.events.Event; offentlig klasse FileRefTut utvider Sprite // Last ned knapper på scenen. Vi må definere dem som offentlige variabler i vår dokumentklasse for å kunne bruke dem. // Ellers får vi feilmelding fra Flash. public var btn_img_download: MovieClip, btn_txt_download: MovieClip, btn_mp3_download: MovieClip, mc_loaded: MovieClip; // Progress Bar public var mc_progress: MovieClip, // Dynamic TextField forblir under Progress Bar. txt_prog: TextField; // Arr_Links holder listen over filer. private var Arr_Links: Array; // Standard banen der nedlastingen er lagret. // Du endrer den i henhold til oppsettet ditt. // Dette er i forhold til SWF. privat var defaultPath: String = "assets /"; // Filnavn privat var urlName: String; // forekomst av FileReference () Klasse privat var fr: FileReference; // url av de forespurte filene private var req: URLRequest; offentlig funksjon FileRefTut (): void // Set buttonMode til true for å endre musekursen til håndikonet btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true; // Angi bredden på mc_loaded fremdriftslinjen til 0 når det ikke er noen nedlasting mc_loaded.scaleX = 0; // Opprett liste over filer som skal lastes ned // Disse filene må være i mappen som er angitt som standardPath Arr_Links = ["miki-monk.jpg", "some-audio.mp3", "dummy-text.rtf"]; // Opprett en forespørsel objekt req = ny URLRequest (); // Opprett en forekomst av FileReference Class fr = ny FileReference (); // ProgressEvent å skala Progress Bar // Vi må legge til ProgressEvent Listener basert på fremdriften av FileReference fr.addEventListener (ProgressEvent.PROGRESS, progressHandler); // Bruk COMPLETE Event for å bestemme når nedlastingen er ferdig fr.addEventListener (Event.COMPLETE, completeHandler); // Event Lyttere for nedlasting av knapper // Når brukeren klikker en nedlastningsknapp, ring ned downloadFile (e: MouseEvent) funksjonen btn_img_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_mp3_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_txt_download.addEventListener (MouseEvent.CLICK, downloadFile);  privat funksjon downloadFile (e: MouseEvent): void // angi nedlastingsbanen til URL-variabelen i henhold til klikket Download Button-bryteren (e.target.name) case "btn_img_download": urlName = Arr_Links [0]; gå i stykker; tilfelle "btn_mp3_download": urlName = Arr_Links [1]; gå i stykker; tilfelle "btn_txt_download": urlName = Arr_Links [2]; gå i stykker;  // endre tekstmelding "fremgang" til "nedlasting?" på txt_prog Dynamic TextFiled txt_prog.text = "downloading?"; // Tilordne URL til req-variabelen req.url = defaultPath + urlName; // Nedladet forespurt fil fr.download (req);  privat funksjon fremgangshandler (hendelse: ProgressEvent): void // Vi skaler fremdriftslinjen i henhold til ration av (event.bytesLoaded / event.bytesTotal) // Så når scaleX når 1, betyr det at nedlastingen er ferdig? mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal);  privat funksjon completeHandler (event: Event): void // nullstill fremdriftslinjen til 0 etter at nedlastingen er ferdig mc_loaded.scaleX = 0; // endre tekstmelding txt_prog.text = "last ned ferdig"; 

Som du kan se nøkkelen er å bruke FileReference med en URLRequest, for å aktivere nedlasting av filer fra vår server. I utgangspunktet trenger vi 3 ting:

  1. Opprett en forekomst av FileReference Klasse
  2.  privat var fr: FileReference;
  3. Opprett en forekomst av URLRequest Klasse
  4.  private var req: URLRequest;
  5. Tilordne filbanen til url parameter av URLRequest eksempel og ring nedlastingsmetode for FileReference Class
  6.  req.url = defaultPath + urlName; fr.download (req);

Merk: Hvis du vil laste ned filer fra en annen vert, må du sette en crossdomain.xml filen til den verten. La oss si at du legger inn din SWF-fil www.host-a.com, og du vil laste ned filer fra www.host-b.com med din swf-fil på www.host-a.com. For å gjøre det, trenger du permisson fra www.host-b.com. Så, du må laste opp en crossdomain.xml filen til www.host-b.com. Hvis du venter, lær mer om crossdomain.xml filer, det er en annen fin Quick Tip her.


Konklusjon

I denne Quick Tip lærte vi hvordan du laster ned filer fra en server, via Flash, til det lokale systemet uten behov for server side skript som PHP. Håper du liker denne raske tipsen og takk for at du har lest det. Hvis du har spørsmål, vennligst send inn en kommentar nedenfor.