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.
Jetons un coup d'œil au résultat final sur lequel nous allons travailler:
Créez un nouveau fichier .fla et enregistrez-le dans le dossier de votre projet..
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.jpgbtn_mp3_download
pour le fichier some-audio.mp3 btn_txt_download
pour le fichier dummy-text.rtfet une barre de progression en bas pour suivre la progression du téléchargement placé sur la scène.
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.
FileReference ()
dans notre codeVoici 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:
FileReference
Classeprivate var fr: FileReference;
URLRequest
Classeprivate var req: URLRequest;
url
paramètre de URLRequest
Méthode de téléchargement d'instance et d'appel de FileReference Classreq.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.
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.