Questo suggerimento rapido spiega come utilizzare la classe FileReference di AS3 per scaricare e salvare i file esterni da Flash RIA senza la necessità di script lato server come PHP. Tutto ciò di cui abbiamo bisogno è il percorso del file che vogliamo consentire all'utente di scaricare.
Diamo un'occhiata al risultato finale su cui lavoreremo:
Crea un nuovo file .fla e salvalo nella cartella del tuo progetto.
Per questo suggerimento rapido, ho creato un'interfaccia. Puoi scaricarlo dal link nella parte superiore della pagina o puoi crearne uno tuo.
Nel mio file .fla, ci sono tre immagini che rappresentano i tipi di file e tre pulsanti di download che sono Un filmato
Oggetti
btn_img_download
per il file miki-monk.jpgbtn_mp3_download
per il file some-audio.mp3 btn_txt_download
per il file dummy-text.rtfe una barra di avanzamento in basso per tenere traccia dello stato di avanzamento del download sullo stage.
Scriveremo il nostro codice in un file di classe documento. Se non si ha familiarità con Document Class, è possibile ottenere informazioni correlate da un altro suggerimento ActiveTuts + Quick.
Creiamo il nostro file Document Class; fare clic su File> Nuovo, quindi selezionare "Classe ActionScript 3.0". Salvare il file AS nella stessa posizione del file .fla.
Collega il tuo file .fla al file Action Script che hai creato - scrivi semplicemente il nome del tuo file AS nel campo relativo nel tuo file .fla.
File di riferimento()
nel nostro codiceEcco la Document Class che ho usato in questo Quick Tip. Si prega di leggere i commenti nel codice per capire il comportamento della classe.
package import flash.display.MovieClip; import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.net.FileReference; import flash.net.URLRequest; import flash.text.TextField; import flash.events.Event; FileRefTut di classe pubblica estende Sprite // Download di pulsanti sullo stage. Dobbiamo definirli come variabili pubbliche nella nostra Document Class per poterli utilizzare. // Altrimenti, riceviamo un messaggio di errore da 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 rimane sotto la barra di avanzamento. txt_prog: TextField; // Arr_Links contiene l'elenco dei file. var privata Arr_Links: Array; // Percorso predefinito in cui è archiviato il download. // Lo cambi in base alla tua configurazione. // Questo è relativo al SWF. private var defaultPath: String = "assets /"; // Nome file private var urlName: String; // istanza di FileReference () Class private var fr: FileReference; // url dei file richiesti private var req: URLRequest; public function FileRefTut (): void // Imposta buttonMode su true per cambiare il cursore del mouse sull'icona della mano btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true; // Imposta la larghezza della barra di avanzamento mc_loaded su 0 quando non ci sono download mc_loaded.scaleX = 0; // Crea una lista di file da scaricare // Questi file devono essere nella cartella specificata da defaultPath Arr_Links = ["miki-monk.jpg", "some-audio.mp3", "dummy-text.rtf"]; // Crea un oggetto richiesta req = new URLRequest (); // Crea un'istanza della classe FileReference fr = new FileReference (); // ProgressEvent per scalare la barra di avanzamento // È necessario aggiungere Listener di ProgressEvent in base all'avanzamento di FileReference fr.addEventListener (ProgressEvent.PROGRESS, progressHandler); // Usa evento COMPLETO per determinare quando il download è terminato fr.addEventListener (Event.COMPLETE, completeHandler); // Listener di eventi per pulsanti di download // Quando l'utente fa clic su qualsiasi pulsante di download, chiama la funzione downloadFile (e: MouseEvent) btn_img_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_mp3_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_txt_download.addEventListener (MouseEvent.CLICK, downloadFile); private function downloadFile (e: MouseEvent): void // imposta il percorso di download nella variabile urlName in base al pulsante Download Button (e.target.name) case "btn_img_download": urlName = Arr_Links [0]; rompere; case "btn_mp3_download": urlName = Arr_Links [1]; rompere; case "btn_txt_download": urlName = Arr_Links [2]; rompere; // cambia il messaggio di testo "avanzamento" in "download?" in txt_prog Dynamic TextFiled txt_prog.text = "download?"; // Assegna l'url alla variabile req.url = defaultPath + urlName; // Downlaod ha richiesto il file fr.download (req); funzione privata progressHandler (event: ProgressEvent): void // Scaliamo la barra di avanzamento in base alla razione di (event.bytesLoaded / event.bytesTotal) // Quindi, quando scaleX raggiunge 1, significa che il download è terminato? mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal); private function completeHandler (event: Event): void // ripristina la barra di avanzamento su 0 al termine del download mc_loaded.scaleX = 0; // cambia messaggio di testo txt_prog.text = "download finished";
Come puoi vedere la chiave è da usare File di riferimento
con un URLRequest
, per abilitare il download di file dal nostro server. Fondamentalmente abbiamo bisogno di 3 cose:
File di riferimento
Classeprivate var fr: FileReference;
URLRequest
Classeprivate var req: URLRequest;
url
parametro di URLRequest
istanza e chiama il metodo di download della classe FileReferencereq.url = defaultPath + urlName; fr.download (req);
Nota: se si desidera scaricare file da un altro host, è necessario inserire un file crossdomain.xml
file in quell'host. Diciamo, hai messo il tuo file swf in www.host-a.com, e vuoi scaricare i file da www.host-b.com con il tuo file swf su www.host-a.com. Per farlo, hai bisogno di permisson www.host-b.com. Quindi, devi caricare un crossdomain.xml
file in www.host-b.com. Se ne sai di più crossdomain.xml
file, c'è un altro bel suggerimento rapido qui.
In questo suggerimento, abbiamo imparato come scaricare file da un server, tramite Flash, al sistema locale senza bisogno di script lato server come PHP. Spero che ti piaccia questo suggerimento e grazie per averlo letto. Se avete domande, si prega di lasciare un commento qui sotto.