Kurztipp Herunterladen von Dateien über SWFs mithilfe von FileReference

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.


Endergebnisvorschau

Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten:


Schritt 1: Erstellen Sie eine neue ActionScript 3.0-Datei

Erstellen Sie eine neue .fla-Datei und speichern Sie sie in Ihrem Projektordner.


Schritt 2: Bereiten Sie die Benutzeroberfläche vor

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.jpg
  • btn_mp3_download für die Datei some-audio.mp3
  • btn_txt_download für die dummy-text.rtf-Datei

und einen Fortschrittsbalken am unteren Rand, um den Download-Fortschritt auf der Bühne zu verfolgen.


Schritt 3: Dokumentenklasse erstellen

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.


Schritt 4: Verwenden Aktenzeichen() in unserem Kodex

Hier 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:

  1. Erstellen Sie eine Instanz von Aktenzeichen Klasse
  2.  private var fr: FileReference;
  3. Erstellen Sie eine Instanz von URLRequest Klasse
  4.  private var req: URLRequest;
  5. Ordnen Sie den Dateipfad dem zu url Parameter von URLRequest Instanz und Aufruf-Download-Methode der FileReference-Klasse
  6.  req.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.


Fazit

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.