Upload en flash. pb de recup du resultat

cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 30 oct. 2008 à 16:58
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 31 oct. 2008 à 14:31
saluté..
je suis en train d'essayer la source suivante
http://www.flashkod.com/codes/UPLOAD-FICHIER-AVEC-FILEREFERENCE-FILEREFERENCELIST_45784.aspx

bon elle marche plutôt pas mal du tout mais j'aimerai l'enrichir de quelques fonctionnalités...
Par exemple est il possible de récupérer le "résultat" de l'exécution du script php à chaque fois qu'une fichier est uploadé...
ça permettrait de gérer les erreurs par exemple si j'upload un fichier de 500 Mo (en local pour le test hein ! ) le fichier php va générer une erreur ... mais le swf n'est pas au courant et affiche un transfert à 100%

ensuite j'aimerai pouvoir déclencher l'upload via une fonction javascript et en lancer une autre une fois que tous les fichiers ont été uploadés...mais ça c'est secondaire pour l'instant

voici le code utilisé dans l'anim au cas où
merci d'avance

var FLRef:FileReferenceList = new FileReferenceList();
// Adresse du script qui va gérer le fichier uploadé
var urlUpload = "http://127.0.0.1/WEB/FileUploader/upload.php";

var arListFiles:Array;
var compteurUpload = 0;
var total_upload = 0;
var total_current_upload = 0;
var upload = 0;
var current_upload = 0;
var nb_file_upload = 0;

// Listener pour gérer les événements
var listener:Object = new Object();

FLRef.addListener(listener);
// Event sur la selection du ou des fichiers
listener.onSelect = function (fileRL:FileReferenceList)
{
    compteurUpload = 0;
    arListFiles = fileRL.fileList;
   
    // On récupére la taille totale des fichiers à uploader
    for (var i:Number = 0; i < fileRL.fileList.length; i++)
        total_upload += arListFiles[i].size;
   
    // Maintenant on commence par uploader le premier fichier
    if (arListFiles[compteurUpload] != null)
    {
        arListFiles[compteurUpload].addListener(this);
        arListFiles[compteurUpload].upload(urlUpload);
    }
}
listener.onComplete = function(file:FileReference):Void
{
    total_current_upload += upload;
    upload = 0;
    if (compteurUpload + 1 < arListFiles.length)
    {
        compteurUpload++;   
        // Maintenant on upload le fichier suivant
        if (arListFiles[compteurUpload] != null)
        {
            arListFiles[compteurUpload].addListener(this);
            arListFiles[compteurUpload].upload(urlUpload);
        }
    }
}

// Event sur erreur HTTP
listener.onHTTPError = function(file:FileReference):Void {}

// Event sur l'annulation de l'upload
listener.onCancel = function(file:FileReference):Void {}

// Event sur l'ouverture du fichier
listener.onOpen = function(file:FileReference):Void {}

// Mise à jour des progresse bar
listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void
{
    //trace ("onProgress : " + file.name);    if (upload 0) upload bytesTotal;
   
    // PB Current
    current_upl.setProgress(bytesLoaded, upload);
   
    // PB Total
    total_upl.setProgress(total_current_upload + bytesLoaded, total_upload);
}

// Event d'erreur E/S
listener.onIOError = function(file:FileReference):Void {}

// Bouton pour l'upload
btnUpload.onPress = function()
{
    FLRef.browse();
}

6 réponses

cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
30 oct. 2008 à 18:13
salut,

oui, en effet, tu as çà :

myListener.onUploadCompleteData = function(myFileReference, mon_retour) {
flash.external.ExternalInterface.call("module._getMyLastFile", mon_retour);
};

Ca récupère le echo 'mon nouveau nom de fichier'; dans ma page d'upload PHP par exemple 
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
31 oct. 2008 à 11:24
merci pour la réponse mais j'arrive pas à faire fonctionner ça dans ce script ...
j'ai ajouté ça

listener.onUploadCompleteData = function(file:FileReference, mon_retour) {
    flash.external.ExternalInterface.call("module._getMyLastFile", mon_retour);
    trace('php'+mon_retour);
};

mais comme c'est une liste d'image multiple j'ai m'impression que ça ne marche pas ...
en fait j'aimerai sélectionner l'image
puis cliquer sur un bouton pour lancer l'upload mais pareil ... je galère :(

@+
0
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
31 oct. 2008 à 11:42
Et il ressemble à quoi le code php qui upload l'image? Je ne comprends pas ce que tu veux recuperer comme info.

"Par exemple est il possible de récupérer le "résultat" de l'exécution du script php à chaque fois qu'une fichier est uploadé...
ça
permettrait de gérer les erreurs par exemple si j'upload un fichier de
500 Mo (en local pour le test hein ! ) le fichier php va générer une
erreur ... mais le swf n'est pas au courant et affiche un transfert à
100%"

Ca c'est dejà implementé à la base dans ton script. Si il ne fonctionne pas, c'est que ton fichier php d'upload est pas bon.

"ensuite j'aimerai pouvoir déclencher l'upload via une fonction
javascript et en lancer une autre une fois que tous les fichiers ont
été uploadés...mais ça c'est secondaire pour l'instant"

Quel est l'interet de lancer un upload via javascript puisque flash le fait tres bien sans javascript? Cette fonction peut en plus etre implémentée directement dans le listener "oncomplete"
0
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
31 oct. 2008 à 11:49
les erreurs sont gérées avec ses fonctions là :

// Event sur erreur HTTP
listener.onHTTPError = function(file:FileReference):Void {}

// Event sur l'annulation de l'upload
listener.onCancel = function(file:FileReference):Void {}

// Event sur l'ouverture du fichier
listener.onOpen = function(file:FileReference):Void {}

Si elles sont vides, evidement, il ne dira rien en cas d'erreur...

Et pour ton onprogress, y a pas de verification de poids :

listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void
{
if(bytesTotal == -1){
 trace("on n'arrive pas à determiner le poids!");
}else{
    //trace ("onProgress : " + file.name);    if (upload 0) upload bytesTotal;
   
    // PB Current
    current_upl.setProgress(bytesLoaded, upload);
   
    // PB Total
    total_upl.setProgress(total_current_upload + bytesLoaded, total_upload);
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
31 oct. 2008 à 14:28
yes ! merci pour ces éclairages.

En fait je veux lancer l'upload via un bouton HTML qui serait placé dans le formulaire contenant l'uploader.
en fait tu remplis ton questionnaire HTML classique avec ses input et dans ce formulaire se trouve l'anim flash d'upload.
là tu choisi les fichiers à uploader qui s'ajoutent à la liste.
au moment de la validation du form HTML (input submit) ça déclenche une fonction JS qui vérifie les paramètres du form et si c'est bon envoie l'upload des fichiers dans le flash.
Le flash envoie ses fichiers au script php qui lui renvoie une réponse ... par exemple OK si le fichier a bien été uploadé et enregistré dans la bdd
une fois la totalité des fichiers envoyé le flash appelle une autre fonction JS qui valide le formulaire pour envoyer les données...
Voila l'idée générale.

les gestionnaires d'erreurs présents dans l'anim flash ne gèrent les erreurs qu'en cas de problème durant le transfert mais pas de problème après la réception sur le serveur... d'ou l'idée de récup le msg de php.

le php d'upload est tout con pour le moment

<?php
    //print_r($_FILES);
    if (isset($_FILES["Filedata"])) {
        move_uploaded_file($_FILES["Filedata"]["tmp_name"], $_FILES["Filedata"]['name']);
        echo 'okay';
        }     else {
          echo "KO";
        }
?>

thx
@+
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
31 oct. 2008 à 14:31
ps : le script en lui même fonctionne pour le moment ...c'est juste que j'ai du me tromper dans ça

listener.onUploadCompleteData = function(file:FileReference, mon_retour) {
    flash.external.ExternalInterface.call("module._getMyLastFile", mon_retour);
    trace('php'+mon_retour);
};

car mon trace n'est jamais exécuté
0
Rejoignez-nous