Astuce télécharger des fichiers via des fichiers SWF à l'aide de FileReference

Cette astuce explique comment utiliser la classe FileReference d'AS3 afin de télécharger et d'enregistrer des fichiers externes à partir de RIA Flash sans recourir à des scripts côté serveur tels que PHP. Tout ce dont nous avons besoin est le chemin du fichier que nous voulons laisser à l'utilisateur télécharger.


Aperçu du résultat final

Jetons un coup d'œil au résultat final sur lequel nous allons travailler:


Étape 1: créez un nouveau fichier ActionScript 3.0

Créez un nouveau fichier .fla et enregistrez-le dans le dossier de votre projet..


Étape 2: Préparez l'interface utilisateur

Pour cette astuce, j'ai créé une interface. Vous pouvez le télécharger à partir du lien en haut de la page ou créer votre propre.

Dans mon fichier .fla, il y a trois images qui représentent les types de fichiers et trois boutons de téléchargement qui sont MovieClip Objets

  • btn_img_download pour le fichier miki-monk.jpg
  • btn_mp3_download pour le fichier some-audio.mp3
  • btn_txt_download pour le fichier dummy-text.rtf

et une barre de progression en bas pour suivre la progression du téléchargement placé sur la scène.


Étape 3: Créer une classe de document

Nous écrirons notre code dans un fichier Document Class. Si vous n'êtes pas familier avec Document Class, vous pouvez obtenir des informations connexes auprès d'un autre ActiveTuts + Astuce.

Créons notre fichier de classe de document; Cliquez sur Fichier> Nouveau, puis sélectionnez "Classe ActionScript 3.0. Enregistrez le fichier AS au même emplacement que votre fichier .fla..

Liez votre fichier .fla au fichier de script d'action que vous avez créé - écrivez simplement le nom de votre fichier AS dans le champ correspondant de votre fichier .fla.


Étape 4: Utilisation FileReference () dans notre code

Voici la classe de document que j'ai utilisée dans cette astuce. Veuillez lire les commentaires dans le code pour comprendre le comportement de la 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; Classe publique FileRefTut étend Sprite // Boutons de téléchargement sur la scène. Nous devons les définir en tant que variables publiques dans notre classe de document pour pouvoir les utiliser. // Sinon, nous obtenons un message d'erreur de Flash. public var btn_img_download: MovieClip, btn_txt_download: MovieClip, btn_mp3_download: MovieClip, mc_loaded: MovieClip; // Barre de progression public var mc_progress: MovieClip, // TextField dynamique reste sous la barre de progression. txt_prog: TextField; // Arr_Links contient la liste des fichiers. private var Arr_Links: Array; // Chemin par défaut où le téléchargement est stocké. // Vous le changez en fonction de votre configuration. // Ceci est relatif au fichier SWF. private var defaultPath: String = "assets /"; // Nom de fichier private var urlName: String; // instance de FileReference () Classe private var fr: FileReference; // url des fichiers demandés private var req: URLRequest; fonction publique FileRefTut (): void // Définissez buttonMode sur true pour remplacer le curseur de la souris par l'icône hand btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true; // Définit la largeur de la barre de progression mc_loaded sur 0 lorsqu'il n'y a aucun téléchargement mc_loaded.scaleX = 0; // Créer une liste de fichiers à télécharger // Ces fichiers doivent figurer dans le dossier spécifié par defaultPath Arr_Links = ["miki-monk.jpg", "some-audio.mp3", "dummy-text.rtf"]; // Créer un objet de requête req = new URLRequest (); // Crée une instance de la classe FileReference. Fr = new FileReference (); // ProgressEvent à l'échelle Barre de progression // Nous devons ajouter ProgressEvent Listener en fonction de la progression de FileReference fr.addEventListener (ProgressEvent.PROGRESS, progressHandler); // Utilisez COMPLETE Event pour déterminer quand le téléchargement est terminé fr.addEventListener (Event.COMPLETE, completeHandler); // Écouteurs d'événement pour les boutons de téléchargement // Lorsque l'utilisateur clique sur un bouton de téléchargement, appelez la fonction downloadFile (e: MouseEvent) btn_img_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_mp3_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_txt_download.addEventListener (MouseEvent.CLICK, downloadFile);  fonction privée downloadFile (e: MouseEvent): void // définit le chemin de téléchargement de la variable urlName en fonction du commutateur de bouton de téléchargement cliqué (e.target.name) case "btn_img_download": urlName = Arr_Links [0]; Pause; case "btn_mp3_download": urlName = Arr_Links [1]; Pause; case "btn_txt_download": urlName = Arr_Links [2]; Pause;  // remplace le message "progress" par "téléchargement?" à txt_prog. Dynamic TextFiled txt_prog.text = "download?"; // Assigne l'URL à la variable req req.url = defaultPath + urlName; // Téléchargez le fichier demandé fr.download (req);  fonction privée progressHandler (event: ProgressEvent): void // Nous redimensionnons la barre de progression en fonction du rapport de (event.bytesLoaded / event.bytesTotal) // Donc, lorsque scaleX atteint 1, cela signifie-t-il que le téléchargement est terminé? mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal);  private function completeHandler (event: Event): void // réinitialise la barre de progression à 0 une fois le téléchargement terminé mc_loaded.scaleX = 0; // change le message texte txt_prog.text = "téléchargement terminé"; 

Comme vous pouvez le voir, la clé est d'utiliser FileReference avec un URLRequest, pour permettre le téléchargement de fichiers depuis notre serveur. Fondamentalement, nous avons besoin de 3 choses:

  1. Créer une instance de FileReference Classe
  2.  private var fr: FileReference;
  3. Créer une instance de URLRequest Classe
  4.  private var req: URLRequest;
  5. Attribuer le chemin du fichier à la url paramètre de URLRequest Méthode de téléchargement d'instance et d'appel de FileReference Class
  6.  req.url = defaultPath + urlName; fr.download (req);

Remarque: Si vous souhaitez télécharger des fichiers d’un autre hôte, vous devez mettre crossdomain.xml déposer dans cet hôte. Disons que vous mettez votre fichier swf dans www.host-a.com, et vous voulez télécharger des fichiers de www.host-b.com avec votre fichier swf sur www.host-a.com. Pour ce faire, vous devez avoir l'autorisation de www.host-b.com. Donc, vous devez télécharger un crossdomain.xml déposer dans www.host-b.com. Si vous ne voulez pas en savoir plus sur crossdomain.xml fichiers, il existe un autre bon conseil rapide ici.


Conclusion

Dans cette astuce, nous avons appris à télécharger des fichiers d'un serveur, via Flash, sur le système local sans avoir besoin de scripts côté serveur tels que PHP. J'espère que vous aimez ce petit conseil et merci de l'avoir lu. Si vous avez des questions, s'il vous plaît laissez un commentaire ci-dessous.