In diesem Quick Tip wird beschrieben, wie Sie die FileReference-Klasse von AS3 verwenden, um externe Dateien von Flash-RIAs herunterzuladen und zu speichern, ohne dass serverseitige Skripts wie PHP erforderlich sind. Alles, was wir brauchen, ist der Pfad der Datei, die der Benutzer herunterladen soll.
Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten:
Erstellen Sie eine neue .fla-Datei und speichern Sie sie in Ihrem Projektordner.
Für diesen Quick Tip habe ich eine Schnittstelle erstellt. Sie können es über den Link oben auf der Seite herunterladen oder einen eigenen erstellen.
In meiner .fla-Datei gibt es drei Bilder, die die Dateitypen darstellen, und drei Download-Schaltflächen, die sind Filmausschnitt
Objekte
btn_img_download
für die Datei miki-monk.jpgbtn_mp3_download
für die Datei some-audio.mp3 btn_txt_download
für die dummy-text.rtf-Dateiund einen Fortschrittsbalken am unteren Rand, um den Download-Fortschritt auf der Bühne zu verfolgen.
Wir werden unseren Code in eine Dokumentenklassendatei schreiben. Wenn Sie nicht mit Document Class vertraut sind, können Sie verwandte Informationen von einem anderen ActiveTuts + Quick Tip erhalten.
Lassen Sie uns unsere Dokumentenklassendatei erstellen. Klicken Sie auf Datei> Neu und wählen Sie "ActionScript 3.0-Klasse". Speichern Sie die AS-Datei am selben Ort wie Ihre .fla-Datei.
Verknüpfen Sie Ihre .fla-Datei mit der von Ihnen erstellten Action Script-Datei. Schreiben Sie einfach den Namen Ihrer AS-Datei in das entsprechende Feld in Ihrer .fla-Datei.
Aktenzeichen()
in unserem KodexHier ist die Dokumentenklasse, die ich in diesem Schnelltipp verwendet habe. Bitte lesen Sie die Kommentare im Code, um das Klassenverhalten zu verstehen.
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; Die public-Klasse FileRefTut erweitert Sprite // Download-Buttons auf der Bühne. Wir müssen sie als öffentliche Variablen in unserer Document-Klasse definieren, um sie verwenden zu können. // Andernfalls erhalten wir eine Fehlermeldung von Flash. public var btn_img_download: MovieClip, btn_txt_download: MovieClip, btn_mp3_download: MovieClip, mc_loaded: MovieClip; // Fortschrittsleiste public var mc_progress: MovieClip // Dynamisches Textfeld bleibt unter der Fortschrittsleiste. txt_prog: TextField; // Arr_Links enthalten die Liste der Dateien. private var Arr_Links: Array; // Standardpfad, in dem der Download gespeichert wird. // Sie ändern es entsprechend Ihrem Setup. // Dies ist relativ zur SWF. private var defaultPath: String = "assets /"; // Dateiname private var urlName: String; // Instanz von FileReference () Klasse private var fr: FileReference; // URL der angeforderten Dateien private var req: URLRequest; public function FileRefTut (): void // setze buttonMode auf true, um den Mauszeiger in ein Handsymbol zu ändern. btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true; // Setze die Breite des mc_loaded-Fortschrittsbalkens auf 0, wenn kein Download erfolgt. Mc_loaded.scaleX = 0; // Liste der herunterzuladenden Dateien erstellen // Diese Dateien müssen sich in dem von defaultPath angegebenen Ordner befinden. Arr_Links = ["miki-monk.jpg", "some-audio.mp3", "dummy-text.rtf"]; // Erstelle ein Anforderungsobjekt req = new URLRequest (); // Eine Instanz der FileReference-Klasse erstellen fr = new FileReference (); // ProgressEvent zum Skalieren der Fortschrittsleiste // Wir müssen ProgressEvent Listener basierend auf dem Fortschritt von FileReference hinzufügen. Fr.addEventListener (ProgressEvent.PROGRESS, progressHandler); // Verwendung des COMPLETE-Ereignisses, um zu bestimmen, wann der Download abgeschlossen ist fr.addEventListener (Event.COMPLETE, completeHandler); // Ereignislistener für Download-Schaltflächen // Wenn der Benutzer auf eine Download-Schaltfläche klickt, rufen Sie die Funktion downloadFile (e: MouseEvent) auf. Btn_img_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_mp3_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_txt_download.addEventListener (MouseEvent.CLICK, downloadFile); private Funktion downloadFile (e: MouseEvent): void // setze den Downloadpfad auf die Variable urlName entsprechend dem Schalter für den Download Button (e.target.name) case "btn_img_download": urlName = Arr_Links [0]; brechen; Fall "btn_mp3_download": urlName = Arr_Links [1]; brechen; Fall "btn_txt_download": urlName = Arr_Links [2]; brechen; // Änderung der Textnachricht "progress" in "downloading?" um txt_prog Dynamic TextFiled txt_prog.text = "downloading?"; // Weisen Sie der req-Variablen URL zu. Req.url = defaultPath + urlName; // Angeforderte Datei herunterladen fr.download (req); private Funktion progressHandler (event: ProgressEvent): void // Wir skalieren den Fortschrittsbalken entsprechend der Ration von (event.bytesLoaded / event.bytesTotal) // Wenn also scaleX 1 erreicht, bedeutet das, dass der Download abgeschlossen ist? mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal); private Funktion completeHandler (event: Event): void // setzt den Fortschrittsbalken nach Abschluss des Downloads auf 0 zurück mc_loaded.scaleX = 0; // Textnachricht ändern txt_prog.text = "Download beendet";
Wie Sie sehen können, ist der Schlüssel zu verwenden Aktenzeichen
mit einer URLRequest
, um das Herunterladen von Dateien von unserem Server zu ermöglichen. Grundsätzlich brauchen wir 3 Dinge:
Aktenzeichen
Klasseprivate var fr: FileReference;
URLRequest
Klasseprivate var req: URLRequest;
url
Parameter von URLRequest
Instanz und Aufruf-Download-Methode der FileReference-Klassereq.url = defaultPath + urlName; fr.download (req);
Hinweis: Wenn Sie Dateien von einem anderen Host herunterladen möchten, müssen Sie eine crossdomain.xml
Datei in diesen Host. Sagen wir, Sie legen Ihre SWF-Datei in www.host-a.com, und Sie möchten Dateien von www.host-b.com mit Ihrer SWF-Datei in www.host-a.com herunterladen. Dazu benötigen Sie eine Genehmigung von www.host-b.com. Du musst also ein hochladen crossdomain.xml
Datei in www.host-b.com. Wenn Sie mehr darüber erfahren möchten crossdomain.xml
Dateien gibt es hier noch einen schönen Quick Tip.
In diesem Quick Tip haben wir gelernt, wie Sie Dateien von einem Server über Flash auf das lokale System herunterladen, ohne dass serverseitige Skripts wie PHP erforderlich sind. Ich hoffe, Ihnen gefällt dieser Quick Tip und vielen Dank, dass Sie ihn gelesen haben. Wenn Sie Fragen haben, schreiben Sie bitte einen Kommentar.