IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

FileUploader version flash (autorisation requise) [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut FileUploader version flash (autorisation requise)
    Bonjour bonjour !

    Ca faisait un moment que je n'etais pas venu
    Voila je rencontre un soucis avec fileUploader. Au debut, je comptais l'utiliser en mode html mais afin de faire des tests avant envoi le mode flash etait le plus souple. Jusqu'a ce que je mette l'application en test sur le serveur principal (et donc plus en local). Lorsque je souhaite uploader un fichier, je me retrouve avec ce message d'erreur :

    httpErrorHandler: name=monFichier.DOC event=[HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=401]
    ioErrorHandler: name=monFichier.DOC event=[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038: Erreur d'E/S de fichier. URL: http://wdsid-9404/SDT/SDT-Dev/Include/uploadfileF.php"]
    Voyant le "status = 401" j'en ai deduit à une demande d'autorisation nécessaire. Ce que je ne saisis pas c'est qu'il arrive a traiter les informations de mon fichier, notamment le poids que je limite, mais des que ca doit l'envoyer au traitement php ca bloque et demande une authentification.

    Auriez-vous une idée par hasard ?
    J'ai cherché un peu partout et je suis tombé régulièrement sur des projets Flex et plus particulièrement sur les cross domain et autres .htaccess.
    Ce que je ne comprends pas non plus etant donné que mon répertoire dojo est dans le repertoire de l'application.

    Merci d'avance pour vos reponses !

    PS : J'utilise la version 1.4.0 de dojo.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Si tu as une "authentification" de l'utilisateur, cela ne fonctionne pas : le flash ne renvoi pas de cookie de session. Il faut alors ruser en passant manuellement le PHPSESSIONID (personnellement j'ai abandonné au profit de la version HTML, faute de temps).

    Si tu as en plus en "authentification" avec un serveur proxy dans un environnement NT (tu parles de 'serveur principal'), ça doit compliquer encore plus la chose.

    Si tu n'as pas d'authentification, alors c'est un simple bug dans ton code.

    Eric

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    C'est ca que je ne comprends pas vraiment.
    J'ai bien un fenêtre windows d'authentification qui apparait et je ne comprends pas pourquoi. Tout se fait au même endroit, il ne devrait pas y avoir ce genre de demande. C'est le serveur qui veut accéder à lui même. Et le php n'a pas de soucis à copier des fichiers cela devrait être la même chose du coup.

    Et ce qui me pose souci (encore un autre) c'est que le chemin que l'authentification demande n'est pas le meme que celui du serveur (adresse du site : wdsid-9404, adresse de l'authentification : wdsid-9404.siv.ad.fr).
    Il n'y a pas de proxy. C'est en intranet.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bon... le problème vient d'une authentification coté serveur. Apache a une phase de récupération du user windows et du coup ca fait bloquer l'objet flash.
    Comme je ne peux pas le changer, je suis repassé au mode html.
    Mais j'ai toujours le meme probleme qui m'avait fait passer au flash. A savoir, lorsque j'upload une première fois il n'y a pas de soucis mais si je reviens sur la page (sans rafraichir) le blank.html apparait avec la textarea qui est retournée par php.
    Comme tu as l'air de ne pas avoir d'ennui avec ce mode pourrais tu m'aiguiller sur ta facon de faire stp ?

    PS : De plus, pour que l'upload fonctionne je suis obligé de créer un bouton or je souhaiterais pouvoir uploader le fichier dès qu'il est choisi par l'utilisateur donc au onchange. J'ai pense au uploadOnChange = true mais comme j'ai des postdata il ne les prend pas ^^
    Et ca aussi je ne vois pas pourquoi il me ne veut pas

    Merci d'avance pour votre aide !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    Quelques éléments de réponse "à froid":

    - Pour que le controle prenne les "postdata", il faut mettre l'ensemble dans une "<form id="formF">" et appeler la fonction "submit" du controle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f.submit(dojo.byId("formF"));
    dojo.stopEvent(evt); /* TRES IMPORTANT POUR IE ! */
    - la réponse doit être dans une <textarea> et elle est "absorbée" par le controle (elle ne s'affiche pas). Si elle s'affiche, c'est que le Upload juste avant n'a pas été exécuter complètement ou correctement.
    - Généralement, il y a un bouton, mais tu devrait pouvoir faire un "connect" sur le "onChange" de la liste.

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Oui c'est ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dojo.connect(dijit.byId('bouton'), "onClick", function(){
    	mesFichiers.submit(dojo.byId("formFileReal"));
    });
    Ce que je saisis pas c'est le dojo.stopEvent(evt)
    Avec le mode flash, c'est exactement le même procédé. Si bien que j'ai juste eu à mettre le " force="html" " et pas besoin de stopEvent.
    Pour le "dojo.connect" avec l'évènement "onChange", j'ai fait comme pour le "onClick" mais il n'envoie rien du tout même les postData.

    Mon fichier php retourne bien un textarea. Je traite bien les données retournées la première fois.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Depuis IE8, si tu ne mets pas le stopEvent, alors IE envoit le formulaire une deuxième fois.
    Sur FF, ça fonctionne car le premier submit arrête l'exécution du script courant vu que l'on quitte la page (en théorie), mais c'est beaucoup plus propre d'arrêter avec le stopEvent.

    Pour le "onChange" de la liste (il faut la trouver dans le DOM ...), place un message de log sur la console pour voir si l'appel est bien fait. Le reste, c'est pareil, que la procédure "submit" soit appelée de n'importe qu'elle façon.

    Juste un commentaire perso: c'est quand même pas très courant de faire le téléchargement immédiatement sans bouton de confirmation ...

    Eric

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Actuellement, l'ensemble des utilisateurs utilisent IE6 et ne peuvent pas utiliser de version plus récente. De plus, pas le droit d'utiliser FF.

    Une bonne nuit sommeil et hop le onChange refonctionne à nouveau. Je ne sais pas pourquoi, je n'ai rien touche je n'ai fait que le sortir de commentaire.

    J'ai tente tout de meme de tester ca avec FF (oui je suis un rebelle :p ) et surtout voir ce qu'il se passe avec firebug. Et là je constate que le blank.html, qui est utilisé pour l'iframe, est continuellement là (en chargement qui plus est) c'est à dire tant que je ne fais pas rafraichir. Si je retourne sur ma page il charge encore.

    Sous IE tout pareil.

    J'ai testé un script de fileuploader de dojoCampus et ca ne le fait pas.

    Je pense que mettre le fileuploader dans un contentPane qui lui meme est dans un borderContainer ca ne lui plait pas.
    (Le bordercontainer me permet de gérer indépendamment le contenu de mon menu et le contenu du corps sans avoir à recharger la page.)

    Pour ce qui est du telechargement sans bouton, ca me permet aussi de gérer indépendamment le formulaire et les fichiers joints. De plus, des que le fichier est uploade l'utilisateur le voit affiché dans un tableau (comme le hthumbs des exemples) avec une petite croix pour pouvoir le supprimer en cas d'erreur.
    Pour info, c'est une remise à niveau d'un "workflow" (comme ils disent mais j'aime pas ce nom ^^) et il y a régulièrement des erreurs dans les fichiers joints et ils ne peuvent pas les supprimer.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Pour aller plus loin, il me faudrait voir un peu plus ton code. En mail privé si tu veux.
    Debugger avec Firebug aide pas mal, ainsi que sous IE8 et le debugger intégré (touche F12). Si tu observes le même problème, c'est bon signe, tu devrais trouver le problème.
    Pour le onChange qui refonctionne, je suis obligé de vider le cache à chaque fois avec IE si je change un fichier java script (y'a maintenant un menu dans le debugger de IE8)

    Je ne pense pas que le conteneur soit un problème. Le mien fonctionne très bien dans plusieurs imbrications de contentPane, borderContainer et tabContainer.

    Autrement, il me semble avoir eu un même problème similaire avec le textarea lorsque j'ai mis au point le mien. Tu peux comparer avec l'exemple de test.

    Eric

  10. #10
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Voila les bouts de code concernant le fileuploader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    /************************** PARTIE JAVASCRIPT *************************/
    // Au load de la page
     
    addThumb = function(d, id){
    	if(!d.error){
    		var img = "<img src=\""+escape(d.type)+"\"/>";
    		var pos = d.file.lastIndexOf("\\");
    		var name = d.file.substr(pos + 1,d.file.length);
    		var str = '<a href="'+d.file+'" target="blank">'+img+' - '+name+'</a>';
    		AddOneRow(name,str,id);
    	} else {
    		rapportErreur(d);
    	}
    }
     
    var props = {
    	hoverClass:"uploadHover",
    	activeClass:"uploadPress",
    	disabledClass:"uploadDisabled",
    	uploadUrl:"Include/uploadfileF.php",
    	fileMask:["All Files", 	"*.*"]
    }
     
    dojo.byId("listeFichiersReal").value = "";
    var mesFichiers = new dojox.form.FileUploader(dojo.mixin({
    	showProgress:true,
    	force:"html",
    	id:"uploader",
    	isDebug:false,
    	selectMultipleFiles:false,
    	deferredUploading:false,
    	fileListId:"listeFichiersReal",
    	tabIndex:11
    }, props), "selectionReal");
     
    dojo.connect(mesFichiers, "onChange", function(){
    	mesFichiers.submit(dojo.byId("formFileReal"));
    });
     
    dojo.connect(mesFichiers, "onComplete", function(dataArray){
    	dojo.forEach(dataArray, function(d){
    		addThumb(d, "tabFichiersReal"); //pour chaque fichier on rajoute une ligne de résultat
    	});
    });
     
    /***************************** FIN PARTIE JAVASCRIPT *******************************/
     
    /***************************** PARTIE HTML *******************************/
     
    <div class="formAnswer">
    	<div id='PJReal' style='margin-left:10px;'>
    	<form dojoType='dijit.form.Form' id='formFileReal'>
    	<fieldset class='thumbField' style="width:500px;"><legend><b>Fichier(s) déjà en pièce jointe : </b></legend>
    		<input dojoType='dijit.form.TextBox' type='hidden' value = '' id='fichierReal' name='fichierReal'>
    		<input dojoType='dijit.form.TextBox' type='hidden' value = '' id='ligneReal' name='ligneReal'>
    		<input dojoType='dijit.form.TextBox' type='hidden' value = '<?php echo $NumDon; ?>' id='NumDonReal' name='NumDonReal'>
    		<input dojoType='dijit.form.TextBox' type='hidden' value = 'REAL' id='typeReal' name='typeReal'>
    		<div class='divField'>
    			<table id='tabFichiersReal' width='500px'>
    				<?php 
                                    //Partie php récupérant les fichiers déjà joints dans la demande
                                    $ssrp = "F".$NumDon;
                                    $dir=$_SESSION['Dir_PJ'].$ssrp.$_SESSION['Dir_REA_Visu']."\\"; // nom du répertoire à lister
                                    if (is_dir($dir)) { 
                                            $handle = opendir( $dir );
                                            // si pas d'erreur d'ouverture du dossier on lance le scan
                                            if( $handle != false ){
                                                    // Parcours du repertoire
                                                    $k = 0;
                                                    while( $item = readdir($handle) ){
                                                            if($item != '.' && $item != '..'){
                                                                    if(!is_dir( $dir.$item )){
                                                                            $type = extension($item);
                                                                            if(!file_exists('../icons/icon_'.$type.'.gif')){
                                                                                    $type = 'icons/icon_defaut.gif';
                                                                            } else {
                                                                                    $type = 'icons/icon_'.$type.'.gif';
                                                                            }
                                                                            $file = $dir.$item;
                                                                            $img = "<img src=\"".$type."\"/>";
                                                                            $str = '<a href="'.$file.'" target="blank">'.$img.' - '.$item.'</a>';
                                                                            print "<tr><td width='95%'>".$str."</td>";
                                                                            print "<td align='right'><a href='#' onclick='supprFichier(\"".$item."\",\"".$k."\");'><img src='icons/supprimer.gif'/></a></td></tr>";
                                                                            $k++;
                                                                    }
                                                            }
                                                            
                                                    }
                                                    if($k == 0){
                                                            print "<tr><td>Aucun fichier joint.</td></tr>";
                                                    }
                                            } else {
                                                    print "Impossible d'ouvrir le répertoire de la demande.";
                                            }
                                            // Fermeture du repertoire
                                            closedir($handle);
                                    } else {
                                            print "<tr><td>Aucun fichier joint.</td></tr>";
                                    }
                                    ?>
    			</table>
    		</div>
    	</fieldset>
    	<br>
    	<div tabIndex="11" id="selectionReal" class="uploadBtn btn"> Ajouter un fichier</div>
    	//on cache la liste des fichiers à envoyer
    	<table style='display:none;'>
    		<tr>
    		<td valign='top'>
    			<div  class="field" id="listeFichiersReal"></div>
    		</td>
    		<input dojoType='dijit.form.TextBox' type='hidden' value='<?php echo $NumDon; ?>' id='numReal' name='numReal'/>
    		</tr>
    	</table>
    	</form>
    	</div>
    </div>
     
    /***************************** FIN PARTIE HTML *******************************/
    Le div "PJReal" est en "display:none" au chargement de la page via une fonction javascript.

    Si tu veux voir la partie php dis le moi. Mais elle correspond au uploadfile des exemples.

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Voici les fichiers de mon upload. Cela correspond a peu pres au format de mon application (doit y avoir un ou deux div en plus dans la version complete). Toutefois c'est le meme systeme de navigation et l'erreur est reproduite.

    index2.php

    file.php

    uploadfileTest.php

    Si quelqu'un voit un erreur ou a une idee du pourquoi du comment ca ne veut pas marcher, je lui en serais tres reconnaissant

  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Je fais un petit up du post pour ne pas qu'il se perde dans les limbes

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Petit up mensuel....

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,
    J'ai trouve un moyen d'utiliser le fileuploader en mode HTMl sans pour autant devoir recharger la page (rafraichir). En fait, il n'aime pas du tout etre charge dans un contentpane car il n'est pas completement detruit lordsque l'on charge une autre page.

    Ma solution a été de créer un fileuploader dans mon index.php (donc chargement dès le début) et d'utiliser un dijit.dialog lorsque l'on souhaite ajouter des pièces jointes. Du coup, en le chargeant qu'une seule fois ca marche nickel. De plus ce la m'a permis de réduire mes scripts js.

  15. #15
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut \o/
    Merci Daniel d'avoir posté ta solution !
    As-tu reçu mon message l'autre jour ? Qu'en penses-tu ? N'as-tu pas là un bel exemple de chose à enseigner ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment gérer les version flash player anciennes ?
    Par semheis dans le forum Flash
    Réponses: 1
    Dernier message: 17/06/2009, 17h19
  2. Réponses: 2
    Dernier message: 23/04/2009, 15h15
  3. Detection version Flash Player
    Par artiflo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/01/2008, 09h05
  4. Réponses: 7
    Dernier message: 02/08/2006, 12h54
  5. [FLASH 8] [Javascript] Pb détection version flash
    Par bractar dans le forum Flash
    Réponses: 2
    Dernier message: 07/02/2006, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo