rufo Pas me confondre avec Lycos! | J'ai pas fais le tests avec un input de type file en hidden et en le remplissant avec un chemin de fichier via du JS mais j'ai eu une problématique y'a quelques temps pour le soft Astres (cf ma signature). Dans l'IHM de base, pour attacher un fichier à une demande, l'utilisateur devait cliquer, à partir de la fiche de la demande, sur un bouton qui ouvrait une nouvelle page où y'avait le formulaire de téléchargement. Une fois le fichier téléchargé, il devait refermer cette fenêtre et rafrachir la fiche de sa demande pour voir le fichier attaché. Il devait réitérer la manip autant de fois que de fichiers à attacher. Pour améliorer l'ergonomie, je me suis dit qu'un plugin en JS (avec de l'ajax) + un peu de PHP qui viendrait, à la volée, modifier directement l'IHM existante et viendrait coller dans la fiche de la demande le formulaire de téléchargement serait une bonne idée.
Je code mon truc et là, le drame, ça fonctionne pas car en cherchant sur le web, je m'apperçois qu'Ajax n'accepte pas un enctype de type multipart/form-data
Dégoûté d'avoir fait tout ça pour rien, je poursuis ma recherche des fois fois qu'il y aurait un moyen de contourner le pb et je tombe sur ce bout de code :
Code :
- function uploadUploadFilePlugin() {
-
- UploadFilePluginFilename = document.getElementById('fFilename').value;
- UploadFilePluginMytext = document.getElementById('sFileDescription').value;
- UploadFilePluginAccessCheckboxes = document.getElementById('hidchkAowLevelID').value;
-
- // request local file read permission
- try {
- netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect" );
- } catch (e) {
- alert("Vous n'avez pas la permission de lire le fichier!" );
- }
- // open the local file
- var file = Components.classes["@mozilla.org/file/local;1"]
- .createInstance(Components.interfaces.nsILocalFile);
- file.initWithPath( UploadFilePluginFilename );
- stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Components.interfaces.nsIFileInputStream);
- stream.init(file, 0x01, 00004, null);
- var bstream = Components.classes["@mozilla.org/network/buffered-input-stream;1"]
- .getService();
- bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
- bstream.init(stream, 1000);
- bstream.QueryInterface(Components.interfaces.nsIInputStream);
- UploadFilePluginBinary = Components.classes["@mozilla.org/binaryinputstream;1"]
- .createInstance(Components.interfaces.nsIBinaryInputStream);
- UploadFilePluginBinary.setInputStream (stream);
- // start AJAX file upload in 1 second
- window.setTimeout("ajax_uploadUploadFilePlugin()", 1000);
- }
- function ajax_uploadUploadFilePlugin() {
- // request more permissions
- try {
- netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect" );
- } catch (e) {
- alert("Vous n'avez pas la permission de lire le fichier!" );
- }
- UploadFilePluginHttp_request = false;
- if (window.XMLHttpRequest) {
- UploadFilePluginHttp_request = new XMLHttpRequest();
- } else if (window.ActiveXObject) {
- UploadFilePluginHttp_request = new ActiveXObject('Microsoft.XMLHTTP');
- } else {
- alert('Votre navigateur ne supporte pas XMLHttpRequest!');
- return false;
- }
- // prepare the MIME POST data
- var boundaryString = 'capitano';
- var boundary = '--' + boundaryString;
- var MyForm;
- var requestbody = '';
- var url = '';
- switch(UploadFilePluginMode) {
- case 'Knowledge':
- break;
- case 'Aow':
- default:
- requestbody = boundary + 'n'
- + 'Content-Disposition: form-data; name="sFileDescription"' + 'n'
- + 'n'
- + UploadFilePluginMytext + 'n'
- + 'n'
- + boundary + 'n'
- + 'Content-Disposition: form-data; name="hidchkAowLevelID"' + 'n'
- + 'n'
- + UploadFilePluginAccessCheckboxes
- + 'n'
- + boundary + 'n'
- + 'Content-Disposition: form-data; name="fFilename"; filename="'
- + UploadFilePluginFilename + '"' + 'n'
- + 'Content-Type: application/octet-stream' + 'n'
- + 'n'
- + escape(UploadFilePluginBinary.readBytes(UploadFilePluginBinary.available()))
- + 'n'
- + boundary;
- MyForm = $('AowFiles').getElementsByTagName('form')[0];
- url = MyForm.action;
- break;
- }
- // do the AJAX request
- UploadFilePluginHttp_request.onreadystatechange = requestDoneUploadFilePlugin;
- UploadFilePluginHttp_request.open('POST', url, true);
- UploadFilePluginHttp_request.setRequestHeader("Content-type", "multipart/form-data;
- boundary="" + boundaryString + """ );
- UploadFilePluginHttp_request.setRequestHeader("Connection", "close" );
- UploadFilePluginHttp_request.setRequestHeader("Content-length", requestbody.length);
- UploadFilePluginHttp_request.send(requestbody);
- }
- function requestDoneUploadFilePlugin()
- {
- if (UploadFilePluginHttp_request.readyState == 4 && UploadFilePluginHttp_request.status == 200) {
- switch(UploadFilePluginMode) {
- case 'Knowledge':
- break;
- case 'Aow':
- default:
- if (UploadFilePluginHttp_request.responseText.indexOf('ErrorMsg', 0) != -1) {
- alert("Le fichier n'a pu être attaché à la demande!" );
- } else {
- var MyForm = $('AowFiles').getElementsByTagName('form')[0];
- MyForm.reset();
- var UploadFilePluginAreaListFiles = $('AowFilesList').getElementsBySelector('td.AowFilesFrame')[0].getElementsByTagName('td')[0];
- UploadFilePluginAreaListFiles.innerHTML = UploadFilePluginHttp_request.responseText;
- }
- break;
- }
- }
- }
|
Pour firefox (v2.x.x.x, pas testé sur la 3), faut modifier une option de sécurité dans son profil pour que ça marche. Pour IE6, y'a rien à faire, ça marche tout seul. Donc je serais pas aussi catégorique que vous sur l'impossibilité de la chose... ---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
|