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

Autres langages pour le Web Discussion :

[XUL] Fichier uploadé restant ouvert [FAQ]


Sujet :

Autres langages pour le Web

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut [XUL] Fichier uploadé restant ouvert
    Bonjour,

    après avoir uploadé avec succès un fichier avec la procédure en fin de conversation, j'ai un petit souci sous WXP SP2 (pas encore essayé sous Ubuntu).
    Le fichier en question est inacessible en renommage, déplacement et suppression tant que je n'ai pas quitté FF puisque lors de ces tentatives, Windows m'indique que le fichier est utilisé par une autre ressource.
    Faut-il fermer le fichier ouvert mais je ne vois rien ici ?
    Faut-il fermer le flux mais ce que je lis ne m'inspire pas trop non plus ?
    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
    const BOUNDARY = "xofxonxof"; //ce qui va nous servir de délimiteur
    const MULTI    = "@mozilla.org/io/multiplex-input-stream;1";
    const FINPUT   = "@mozilla.org/network/file-input-stream;1";
    const STRINGIS = "@mozilla.org/io/string-input-stream;1";
    const BUFFERED = "@mozilla.org/network/buffered-input-stream;1";
    const XPC      = "UniversalXPConnect";
    const FP       = "@mozilla.org/filepicker;1";
    const FL       = "@mozilla.org/file/local;1"; 
    const MIME     = "@mozilla.org/mime;1";
    const HASH     = "@mozilla.org/security/hash;1";
    const nsIMultiplexInputStream = Components.interfaces.nsIMultiplexInputStream;
    const nsIFileInputStream      = Components.interfaces.nsIFileInputStream;
    const nsIStringInputStream    = Components.interfaces.nsIStringInputStream;
    const nsIBufferedInputStream  = Components.interfaces.nsIBufferedInputStream;
    const nsIFilePicker           = Components.interfaces.nsIFilePicker;
    const nsiLocalFile            = Components.interfaces.nsILocalFile;
    const nsICryptoHash           = Components.interfaces.nsICryptoHash;
    const nsIMIMEService          = Components.interfaces.nsIMIMEService;
    const sl="\n";
    function fa_fichier_lit_et_envoie(vv_script,vv_callback,vv_fichier) {
      try {
      	netscape.security.PrivilegeManager.enablePrivilege(XPC);
      } catch (e) {
      	alert("Vous n'avez pas l\'autorisation de lire des fichiers!!");
      	return null;
      }
      //  Piqué ici : http://xulfr.org/wiki/ApplisWeb/Request
       var file =  Components.classes[FL].createInstance(nsiLocalFile);
       file.initWithPath(vv_fichier);
       if ( file.exists() != true) {
        alert("Le fichier "+vv_fichier+" n'existe pas");
        return null;
        }
      var mis = Components.classes[MULTI].createInstance(nsIMultiplexInputStream);
      var fin = Components.classes[FINPUT].createInstance(nsIFileInputStream);
      fin.init(file, 0x01, 0444, null);
      var hsis = Components.classes[STRINGIS].createInstance(nsIStringInputStream);
      var buf = Components.classes[BUFFERED].createInstance(nsIBufferedInputStream);
      var endsis = Components.classes[STRINGIS].createInstance(nsIStringInputStream);
      buf.init(fin, 4096);  
      var vl_c_disp00='Content-Disposition: form-data;name="addfile"'+sl+sl;
      var vl_c_disp01='Content-Disposition: form-data;name="filename";filename="'+file.leafName+'"'+sl;
      var vl_c_type='Content-Type: ' + Components.classes[MIME].getService(nsIMIMEService).getTypeFromFile(file) + sl+sl;
      var sheader = new String();
      sheader += sl;
      sheader += "--" + BOUNDARY + sl;
      sheader += vl_c_disp00;
      sheader += sl + "--" + BOUNDARY + sl;
      sheader += vl_c_disp01;
      sheader += vl_c_type; 
      hsis.setData(sheader, sheader.length);
      var endsis = Components.classes[STRINGIS].createInstance(nsIStringInputStream);
      var bs = new String(sl+'--' + BOUNDARY + '--'+sl);
      endsis.setData(bs, bs.length);
      mis.appendStream(hsis);
      mis.appendStream(buf);
      mis.appendStream(endsis);
      var xmlr = new XMLHttpRequest();
      xmlr.open("POST", vv_script, true);
      xmlr.setRequestHeader("Content-Length", mis.length );
      xmlr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
      xmlr.onreadystatechange=function() {if(xmlr.readyState==4) {if(vv_callback!=""){vv_callback(xmlr.responseText,xmlr.responseText.length);}}};
      xmlr.send(mis);
      return 'ok';
    }
    Cordialement,
    Christophe Charron

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    ben faut tester... pour voir


    le coup du delete_on_close doit pouvoir se modifier...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par gorgonite
    ben faut tester... pour voir


    le coup du delete_on_close doit pouvoir se modifier...
    vivi, mais tester quoi !! ?? : en fait j'ai testé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
     mis.appendStream(endsis);
      fin.close();
      var xmlr = new XMLHttpRequest();
    ...
    mais rien de mieux !
    Cordialement,
    Christophe Charron

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    je pensais au fin.close()

    mais si ça marche pas, je sèche...


    peux-tu expliquer plus en détails les symptomes ?


    nb: j'ai arrêté le xul depuis 8 mois...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par gorgonite
    je pensais au fin.close()

    mais si ça marche pas, je sèche...


    peux-tu expliquer plus en détails les symptomes ?

    nb: j'ai arrêté le xul depuis 8 mois...
    Je compatis. Rassure moi, ce n'est pas à cause de xul ?
    Cordialement,
    Christophe Charron

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Christophe Charron
    Je compatis. Rassure moi, ce n'est pas à cause de xul ?

    non pas du tout... mais mes études m'ont pris trop de temps

    sinon j'ai peut-être possibilité de remonter en force dans xul... via un projet pour la fondation mozilla directement
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par gorgonite
    sinon j'ai peut-être possibilité de remonter en force dans xul... via un projet pour la fondation mozilla directement
    Félicitations, j'espère pour toi que ça va se faire.
    Cordialement,
    Christophe Charron

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Je sais que je déterre un très vieux post mais je tiens quand même à répondre parce que j'ai pas mal galéré aussi là-dessus.

    En fait pour que le fichier qui est uploadé soit fermé, il suffit de mettre ceci à la place de l'init du nsIFileInputStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stream.init(file, -1, -1, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);
    C'est tout con mais faut le savoir...

  9. #9
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par nesfe Voir le message
    Je sais que je déterre un très vieux post mais je tiens quand même à répondre parce que j'ai pas mal galéré aussi là-dessus.

    En fait pour que le fichier qui est uploadé soit fermé, il suffit de mettre ceci à la place de l'init du nsIFileInputStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stream.init(file, -1, -1, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);
    C'est tout con mais faut le savoir...
    Vieux post peut-être, mais le problème avait été laissé en suspens et donc un grand merci pour me permettre de traîner une casserole de moins.
    Cordialement,
    Christophe Charron

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

Discussions similaires

  1. Supprimer fichier uploader avec aspSmartUpload
    Par julio_097 dans le forum ASP
    Réponses: 2
    Dernier message: 11/08/2005, 16h27
  2. Detecter si un Fichier est deja ouvert
    Par Didier Derain dans le forum C++Builder
    Réponses: 8
    Dernier message: 25/02/2005, 19h27
  3. renommer un fichier uploadé
    Par Sowa dans le forum ASP
    Réponses: 2
    Dernier message: 07/02/2005, 09h23
  4. Tester si un fichier X est ouvert
    Par James64 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/10/2004, 15h48
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

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