Côté flash
Voici le
script côté flash. la plupart des gestionnaires offerts par le language Action Script sont implémentés. La gestion des erreurs au niveau du script serveur comprends simplement l'affichage du message renvoyé par le script dans le champ de texte du fichier correspondant.
Attention toutefois, le gestionnaire onUploadCompleteData est une fonctionnalité récente d'Action Script. Aussi il vous faudra une version de flash supérieure à Flash 8 pour que cet événement se déclenche en mode "prévisualisation de l'animation" dans l'interface de développement Flash. En effet la preview de flash utilise le flashplayer associé à la version de flash que vous utilisez (et pas celui de votre navigateur). Donc cet événement peut ne pas être détecté.
Toutefois utiliser Flash 8 pour coder et compiler l'animation ne vous empèche pas de la faire fonctionner parfaitement dans votre navigateur pourvu qu'il ait une version du flash player récente ! Pas de panique, pas besoin d'acheter une nouvelle licence Flash !
Au niveau de l'utilisation le gestionnaire onUploadCompleteData sert à récupérer le message envoyé par votre fichier côté serveur. La réception de ce message sert à mettre à jour l'état du fichier une fois uploadé. Upload OK (réponse = 1.) la barre devient verte, Erreur (réponse = [message texte de l'erreur] : la barre devient rouge et l'erreur s'affiche.
Le taux de pénétration du flash player 9 (prenant en compte ce gestionnaire) étant de 97% à l'heure ou j'écris ces lignes. NAS Uploader devrait fonctionner parfaitement chez la plupart de vos visiteurs... Ce qui est plutôt bien quand on regarde le nombres de bugs qui surviennent sur les diférents navigateurs en terme d'implémentation de mass uploaders en Ajax/javascript...
import flash.external.*;
/**** JS / FLASH FUNCTIONS **/
_root.vargetgoupload = '';
// variables get envoyées par JS depuis la fonction goUpload
//
_root.vargetsessions = '';
// variables de session php qu'on récup via le fichier
//getdata.php et qu'on va transformer en variables get
//
//
function goUpload(str:String):Void {
trace('goUpload');
_root.vargetgoupload = str;
varstatusText = "Upload en cours...";
trace('--');
uploadImages(event);
}
ExternalInterface.addCallback("goUpload", null, goUpload);
// fonction lancée si on clique sur le bouton uploader dans flash
function goUploadFlash():Void {
varstatusText = "Upload en cours...";
uploadImages(event);
}
function getSessionVars() {
var varEmetteur:LoadVars = new LoadVars();
var varRecepteur:LoadVars = new LoadVars();
//on crée un nouvel objet date
dateCourante = new Date();
//on attribue à l'objet loadVars émetteur nos paramètres ainsi que la date
varEmetteur.date = dateCourante.getTime();
varRecepteur.onLoad = function(succes) {
if (succes) {
trace('txt loaded');
_root.vargetsessions = varRecepteur.varsession;
trace(_root.vargetsessions);
//varstatusText = _root.vargetsessions;
}
};
// le chemin de getdata est donné par rapport au chemin de la page dans laquelle se trouve l'animation
varEmetteur.sendAndLoad('getdata.php', varRecepteur, "POST");
}
//on load une première fois
getSessionVars() ;
/*****************/
stop();
varstatusText = "Choisissez des fichiers à uploader.";
function resetall(event) {
list = new Array();
files = new Array();
browsebtn.enabled = true;
uploadBtn.enabled = false;
newfile = 1;
totalsize = 0;
_root.total = 0;
my_sp.refreshPane();
varstatusText = "Choisissez des fichiers à uploader !";
}
//
function browser(event) {
fileRefList.browse([{description:"Image files", extension:"*.jpg;*.gif;*.png", macType:"JPEG;jp2_;GIFF"}]);
}
//
function uploadImages(event) {
browsebtn.enabled = false;
uploadBtn.enabled = false;
up(uploadindex);
}
//
function up(num) {
selectedFile = list[num];
selectedFile.addListener(this);
// varget est récupéré dans les flashvars
// _root.vargetgoupload est potentiellement envoyé en argument dans
//la fonction javascript goUpload
//_root.vargetsessions est potentiellement envoyé par le fichier getdata.php qui
// peut servir à renvoyer des variables de session au format get
//
//
//le chemin du fichier d'upload est donné par rapport au chemin du fichier swf nasuploader
selectedFile.upload("../upload_filemanager.php?"+varget+_root.vargetgoupload+_root.vargetsessions);
}
// End of the function
var selectedFile;
var listener = new Object();
var list = new Array();
files = new Array();
var newfile = 0;
var totalsize = 0;
var uploadindex;
uploadBtn.enabled = false;
uploaded = false;
_root.statusText = ""+uploadUrl;
var uploadedfiles = new Array();
var work_id;
var fileIds = new Array();
_root.Title = Title.length != undefined ? (Title) : ("");
listener.onSelect = function(fileRefList) {
uploadindex = 0;
browsebtn.enabled = true;
uploadBtn.enabled = true;
var _loc4 = new Array();
_loc4 = fileRefList.fileList;
for (var _loc3 = 0; _loc3<_loc4.length; ++_loc3) {
selectedFile = _loc4[_loc3];
list.push(selectedFile);
//on envoie le nom du fichier au js
ExternalInterface.call("Update_File", selectedFile.name);
//
selectedFile.addListener(this);
obj = new Object();
obj.file_name = selectedFile.name;
obj.file_size = selectedFile.size;
totalsize = Number(totalsize)+Number(selectedFile.size);
obj.upload_bytes = 0;
obj.status = 0;
obj.erroruploadtxt = ''; //erreur renvoyée par php en string
obj.error = "";
_root.files.push(obj);
_root.newfile = 1;
my_sp.refreshPane();
}
//
_root.total = list.length;
};
var fileRefList = new flash.net.FileReferenceList();
fileRefList.addListener(listener);
browsebtn.addEventListener("click", browser);
uploadBtn.addEventListener("click", goUploadFlash);
resetbtn.addEventListener("click", resetall);
/*********************/
listener.onOpen = function(selectedFile) {
files[uploadindex].status = 1;
};
listener.onProgress = function(File, bytesLoaded, bytesTotal) {
trace('uploadindex='+uploadindex);
files[uploadindex].status = 1;
files[uploadindex].upload_bytes = bytesLoaded/bytesTotal*100;
newfile = 1;
my_sp.refreshPane();
};
listener.onHTTPError = function(file, httpError) {
files[uploadindex].error = errorString;
files[uploadindex].status = 3;
++uploadindex;
if (uploadindex<list.length) {
up(uploadindex);
}
//
};
listener.onIOError = function(file) {
files[uploadindex].error = errorString;
files[uploadindex].status = 3;
++uploadindex;
if (uploadindex<list.length) {
up(uploadindex);
}
//
};
listener.onSecurityError = function(file, errorString) {
files[uploadindex].status = 3;
files[uploadindex].error = errorString;
};
listener.onUploadCompleteData = function(selectedFile, errorString:String):Void {
trace('uploadindex onUploadCompleteData='+uploadindex);
if (errorString != '1.') {
ExternalInterface.call("Upload_File_Finished", 'error : '+errorString);
//erreur php
files[uploadindex-1].status = 3;
files[uploadindex-1].erroruploadtxt = errorString;
} else {
ExternalInterface.call("Upload_File_Finished", files[uploadindex-1].file_name);
//ok fichier uploadé
files[uploadindex-1].status = 2;
files[uploadindex-1].erroruploadtxt = ''; // pas d'erreur
}
my_sp.refreshPane();
};
listener.onComplete = function(selectedFile) {
trace('uploadindex onComplete='+uploadindex);
if (files[uploadindex].status == 1 ) {
files[uploadindex].status = 2;
}
files[uploadindex].upload_bytes = 100;
newfile = 1;
my_sp.refreshPane();
statusArea.text = statusArea.text+("uploadindex :"+uploadindex+"uploaded");
++uploadindex;
if (uploadindex<list.length) {
up(uploadindex);
} else {
uploaded = true;
varstatusText = "Upload terminé";
ExternalInterface.call("Upload_Finished");
}
//
};
Attention toutefois, le gestionnaire onUploadCompleteData est une fonctionnalité récente d'Action Script. Aussi il vous faudra une version de flash supérieure à Flash 8 pour que cet événement se déclenche en mode "prévisualisation de l'animation" dans l'interface de développement Flash. En effet la preview de flash utilise le flashplayer associé à la version de flash que vous utilisez (et pas celui de votre navigateur). Donc cet événement peut ne pas être détecté.
Toutefois utiliser Flash 8 pour coder et compiler l'animation ne vous empèche pas de la faire fonctionner parfaitement dans votre navigateur pourvu qu'il ait une version du flash player récente ! Pas de panique, pas besoin d'acheter une nouvelle licence Flash !
Au niveau de l'utilisation le gestionnaire onUploadCompleteData sert à récupérer le message envoyé par votre fichier côté serveur. La réception de ce message sert à mettre à jour l'état du fichier une fois uploadé. Upload OK (réponse = 1.) la barre devient verte, Erreur (réponse = [message texte de l'erreur] : la barre devient rouge et l'erreur s'affiche.
Le taux de pénétration du flash player 9 (prenant en compte ce gestionnaire) étant de 97% à l'heure ou j'écris ces lignes. NAS Uploader devrait fonctionner parfaitement chez la plupart de vos visiteurs... Ce qui est plutôt bien quand on regarde le nombres de bugs qui surviennent sur les diférents navigateurs en terme d'implémentation de mass uploaders en Ajax/javascript...