Fichier restant ouvert après un upload

Vous vous penchez sur le développement d'applications ou d'extensions pour Mozilla ? C'est alors vers ce forum que se dirigeront naturellement vos requêtes...
christophe charron
Gecko
Messages : 73
Inscription : 02 févr. 2006, 19:36

Fichier restant ouvert après un upload

Message par christophe charron »

Bonjour,
après un upload réalisé avec succès, le fichier manipulé reste bloqué, sous windows (pas encore testé sous ubuntu).
D'une part, je ne suis pas sûr de l'ouvrir en lecture seule et d'autre part la fermeture ne se fait pas à l'endroit demandé : je reste figé pendant des lustres .

Ci-après le code qui fonctionne :

Code : Tout sélectionner

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="\r\n";
const sl="\n";

Code : Tout sélectionner

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);

Code : Tout sélectionner

  fin.init(file, 0x01, 0444, null);
Les paramètres d'ouverture sont-ils corrects ?

Code : Tout sélectionner

  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 typefromfile="";
  //try {typefromfile=Components.classes[MIME].getService(nsIMIMEService).getTypeFromFile(file);} catch(e) {alert(e);fa_gid("tb_descriptif_sommaire").value=e;typefromfile="bizarre";}
  //try {typefromfile=Components.classes[MIME].getService(nsIMIMEService).getTypeFromExtension(file);} catch(e) {alert(e);fa_gid("tb_descriptif_sommaire").value=e;typefromfile="bizarre";}
  try {typefromfile=Components.classes[MIME].getService(nsIMIMEService).getTypeFromFile(file);} catch(e) {typefromfile="bizarre";}
  var vl_c_type='Content-Type: ' + typefromfile + 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.onreadystatechange=function() {if(xmlr.readyState==4) {if(vv_callback!=""){alert(xmlr.responseText);vv_callback(xmlr.responseText,xmlr.responseText.length);}}};
Les 2 lignes précédentes, si décommentées, fonctionnent.
La ligne suivante bloque entre le "alert" et le lancement de la procédure de traitement de retour. Bloque donc sur le "fin.close();"

Code : Tout sélectionner

  xmlr.onreadystatechange=function() {if(xmlr.readyState==4) {if(vv_callback!=""){alert(xmlr.responseText);fin.close();vv_callback(xmlr.responseText,xmlr.responseText.length);}}};
  xmlr.send(mis);
  return 'ok';
}
Des idées pour fermer ce satané fichier ?

--
Cordialement,
Christophe Charron
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
arno. sans ses cookies

Message par arno. sans ses cookies »

Tu cherches à faire quoi au juste ?

Si c'est envoyer un fichier par requête post, regarde xulwidget, y'a un xbl qui fait justement exactement ça

http://xulwidgets.mozdev.org/
christophe charron
Gecko
Messages : 73
Inscription : 02 févr. 2006, 19:36

Message par christophe charron »

arno. sans ses cookies a écrit :Tu cherches à faire quoi au juste ?

Si c'est envoyer un fichier par requête post, regarde xulwidget, y'a un xbl qui fait justement exactement ça

http://xulwidgets.mozdev.org/
Je cherche, et arrive très bien, à envoyer mon fichier par requête post. Je voudrais juste qu'il soit exploitable après l'upload, sans être obligé de quitter FF pour libérer la ressource.
Je vais voir l'xbl en question tout de même.
Merci.

--
Cordialement,
Christophe Charron

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
christophe charron
Gecko
Messages : 73
Inscription : 02 févr. 2006, 19:36

Message par christophe charron »

arno. sans ses cookies a écrit :Tu cherches à faire quoi au juste ?

Si c'est envoyer un fichier par requête post, regarde xulwidget, y'a un xbl qui fait justement exactement ça

http://xulwidgets.mozdev.org/
Heu ... lequel, je n'ai rien vu :shock:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message par arno. »

christophe charron
Gecko
Messages : 73
Inscription : 02 févr. 2006, 19:36

Message par christophe charron »

Bonjour,
c'est ce qui me semblait, mais je ne suis pas suffisamment bon en JS pour en tirer la substantifique moelle. Je vais donc chercher d'autres pistes.
Merci quand même.

--
Cordialement,
Christophe Charron

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 15 invités