Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Fichier restant ouvert après un upload

Envoyé par : Christophe Charron

Date : 31/03/2007 17:13

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 inaccessible 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 ?

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';
}

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.