Uploader un fichier sans passer par Parcourir

Uploader un fichier sans passer par Parcourir - PHP - Programmation

Marsh Posté le 23-10-2007 à 11:20:38    

Bonjour,
 
Je voudrais savoir comment faire pour créer un script qui uploade automatiquement un fichier situé dans un répertoire précis, donc sans passer par le bouton parcourir créé automatiquement avec un <input type=file>.
Au besoin, je suis prêt à ajouter plusieurs boutons de confirmation mais je veux que n'importe quel handicapé de l'informatique puisse m'envoyer son fichier sans difficulté.

Reply

Marsh Posté le 23-10-2007 à 11:20:38   

Reply

Marsh Posté le 23-10-2007 à 11:22:43    

On ne peut pas pour des raisons de sécurité. Ca voudrait dire qu'on pourrait uploader un fichier arbitraire sans intervention de l'utilisateur, autrement dit bonjour le bordel...


Message édité par FlorentG le 23-10-2007 à 11:22:49
Reply

Marsh Posté le 23-10-2007 à 11:26:39    

perdu , ca va pas etre possible en javascript n i en php

Reply

Marsh Posté le 23-10-2007 à 15:23:26    

C'est possible en quoi alors ?
Sinon moi je veux bien une intervention de l'utilisateur mais pas un parcourir, c'est trop fastidieux pour un béotien. Par exemple, mettre une valeur par défaut dans le champ parcourir, ce serait pas possible ?

Reply

Marsh Posté le 23-10-2007 à 15:27:55    

en java ou via un activeX ça doit être jouable

Reply

Marsh Posté le 23-10-2007 à 15:38:10    

hal9100 a écrit :

Sinon moi je veux bien une intervention de l'utilisateur mais pas un parcourir, c'est trop fastidieux pour un béotien.?


Bof... C'est quand-même pas compliqué, ils utilisent bien des trucs styles word ou excel et la boîte de dialogue "ouvrir"... Même si je suis d'accord qu'il faut rester simple et faire gaffe aux grands-débutants, vouloir éviter la sélection d'un fichier est strictement impossible.
 
Sinon, autant carrément utiliser une reconnaissance vocale, les pauvres, imaginent s'ils doivent utiliser une souris, c'est trop compliqué :D :D :D

Reply

Marsh Posté le 24-10-2007 à 12:04:00    

Pas de souris, c'est sur pda. :)

Reply

Marsh Posté le 26-11-2007 à 17:02:36    

Alors là j'en reviens pas, quelqu'un qui a exactement le même problème que moi !!!  :ouch:  
hal9100 , j'aurai pu écrire ton message...
 
Bon, allons au but de mon message , as-tu trouvé une solution ??  :??:  
Je dois aussi pré-remplir mon champ upload pour des raisons identiques aux tiennes, ou me positionner directement là ou il faut quand je fais "parcourir".
 
Help ... :cry:

Reply

Marsh Posté le 26-11-2007 à 17:23:24    

je forme à la sécurité informatique de temps en temps et j'ai testé ce genre de fonctionnalité attaque il y a à peine une semaine,  
 
avec ce code :  
 

Code :
  1. <form name="frm" >
  2.         <input type="file" name="doc" />
  3. </form>
  4. <script>
  5.          document.frm.doc.value="/etc/passwd";
  6. </script>


 
 
et dans la console d'erreur de firefox :  
 
Erreur : uncaught exception: [Exception... "Security error"  code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)"  location: "file:///home/kaspa/tmp_ici/index.html Line: 12"]
 
ca à le mérite d'etre clair :  :sarcastic:


Message édité par PierreC le 26-11-2007 à 17:27:54

---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 25-02-2009 à 11:54:12    

Problème du même genre : je veux uploader un fichier précis, celui-là et pas un autre (par exemple  toto.txt). Je ne veux pas que l'utilisateur soit obligé de parcourir ses répertoires. Il clique sur le bouton submit et le fichier est envoyé au serveur.
Il est vrai que le procédé peut être dangereux, par exemple pour piquer des infos. Il peut également être détourné pour envoyer du code pourri au serveur. De toute façon, l'upload présente des problèmes de sécurité.

Reply

Marsh Posté le 25-02-2009 à 11:54:12   

Reply

Marsh Posté le 25-02-2009 à 12:11:32    

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 :
  1. function uploadUploadFilePlugin() {
  2.        
  3.         UploadFilePluginFilename = document.getElementById('fFilename').value;
  4.         UploadFilePluginMytext = document.getElementById('sFileDescription').value;
  5.         UploadFilePluginAccessCheckboxes = document.getElementById('hidchkAowLevelID').value;
  6.      
  7.         // request local file read permission
  8.         try {
  9.                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect" );
  10.         } catch (e) {
  11.                 alert("Vous n'avez pas la permission de lire le fichier!" );
  12.         }
  13.         // open the local file
  14.         var file = Components.classes["@mozilla.org/file/local;1"]
  15.                 .createInstance(Components.interfaces.nsILocalFile);
  16.         file.initWithPath( UploadFilePluginFilename );
  17.         stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
  18.                 .createInstance(Components.interfaces.nsIFileInputStream);
  19.         stream.init(file,        0x01, 00004, null);
  20.         var bstream =  Components.classes["@mozilla.org/network/buffered-input-stream;1"]
  21.                 .getService();
  22.         bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
  23.         bstream.init(stream, 1000);
  24.         bstream.QueryInterface(Components.interfaces.nsIInputStream);
  25.         UploadFilePluginBinary = Components.classes["@mozilla.org/binaryinputstream;1"]
  26.                 .createInstance(Components.interfaces.nsIBinaryInputStream);
  27.         UploadFilePluginBinary.setInputStream (stream);
  28.         // start AJAX file upload in 1 second
  29.         window.setTimeout("ajax_uploadUploadFilePlugin()", 1000);
  30. }
  31. function ajax_uploadUploadFilePlugin() {
  32.         // request more permissions
  33.         try {
  34.             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect" );
  35.         } catch (e) {
  36.             alert("Vous n'avez pas la permission de lire le fichier!" );
  37.         }
  38.         UploadFilePluginHttp_request = false;
  39.         if (window.XMLHttpRequest) {
  40.             UploadFilePluginHttp_request = new XMLHttpRequest();
  41.         } else if (window.ActiveXObject) {
  42.             UploadFilePluginHttp_request = new ActiveXObject('Microsoft.XMLHTTP');
  43.         } else {
  44.             alert('Votre navigateur ne supporte pas XMLHttpRequest!');
  45.             return false;
  46.         }
  47.         // prepare the MIME POST data
  48.         var boundaryString = 'capitano';
  49.         var boundary = '--' + boundaryString;
  50.         var MyForm;
  51.         var requestbody = '';
  52.         var url = '';
  53.         switch(UploadFilePluginMode) {
  54.             case 'Knowledge':
  55.                 break;
  56.             case 'Aow':
  57.             default:
  58.                 requestbody = boundary + 'n'
  59.                 + 'Content-Disposition: form-data; name="sFileDescription"' + 'n'
  60.                 + 'n'
  61.                 + UploadFilePluginMytext + 'n'
  62.                 + 'n'
  63.                 + boundary + 'n'
  64.                 + 'Content-Disposition: form-data; name="hidchkAowLevelID"' + 'n'
  65.                 + 'n'
  66.                 + UploadFilePluginAccessCheckboxes
  67.                 + 'n'
  68.                 + boundary + 'n'
  69.                 + 'Content-Disposition: form-data; name="fFilename"; filename="'
  70.                 + UploadFilePluginFilename + '"' + 'n'
  71.                 + 'Content-Type: application/octet-stream' + 'n'
  72.                 + 'n'
  73.                 + escape(UploadFilePluginBinary.readBytes(UploadFilePluginBinary.available()))
  74.                 + 'n'
  75.                 + boundary;
  76.                 MyForm = $('AowFiles').getElementsByTagName('form')[0];
  77.                 url = MyForm.action;
  78.                 break;
  79.         }
  80.         // do the AJAX request
  81.         UploadFilePluginHttp_request.onreadystatechange = requestDoneUploadFilePlugin;
  82.         UploadFilePluginHttp_request.open('POST', url, true);
  83.         UploadFilePluginHttp_request.setRequestHeader("Content-type", "multipart/form-data;
  84.                 boundary="" + boundaryString + """ );
  85.         UploadFilePluginHttp_request.setRequestHeader("Connection", "close" );
  86.         UploadFilePluginHttp_request.setRequestHeader("Content-length", requestbody.length);
  87.         UploadFilePluginHttp_request.send(requestbody);
  88. }
  89. function requestDoneUploadFilePlugin()
  90. {
  91.      if (UploadFilePluginHttp_request.readyState == 4 && UploadFilePluginHttp_request.status == 200) {
  92.           switch(UploadFilePluginMode) {
  93.              case 'Knowledge':
  94.                  break;
  95.              case 'Aow':
  96.              default:
  97.                  if (UploadFilePluginHttp_request.responseText.indexOf('ErrorMsg', 0) != -1) {
  98.                      alert("Le fichier n'a pu être attaché à la demande!" );
  99.                  } else {
  100.                      var MyForm = $('AowFiles').getElementsByTagName('form')[0];
  101.                      MyForm.reset();
  102.                      var UploadFilePluginAreaListFiles = $('AowFilesList').getElementsBySelector('td.AowFilesFrame')[0].getElementsByTagName('td')[0];
  103.                      UploadFilePluginAreaListFiles.innerHTML = UploadFilePluginHttp_request.responseText;
  104.                  }
  105.                  break;
  106.           }
  107.      }
  108. }


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
Reply

Marsh Posté le 25-02-2009 à 12:15:50    

Pour compéter ma réponse, voici qq sites intéressants :
http://www.captain.at/ajax-file-upload.php (là où j'ai pompé mon code il me semble)
 
https://developer.mozilla.org/en/Co [...] e_I%2F%2FO


---------------
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
Reply

Marsh Posté le 25-02-2009 à 14:39:24    

Négatif pour Ajax : le client est un Pocket PC, qui ne comprend rien à Ajax. Alors à part envoyer le fichier par mail, pour l'instant je ne vois pas trop de solutions.
 
Une solution à peu près acceptable passerait par l'upload standard : un input de type file avec le paramètre enctype="multipart/form-data". Cela affiche une liste des fichiers disponibles, mais sans filtrage des types de fichiers. Il faudrait pouvoir poser un filtre sur le nom des fichiers visibles des façon à ne pas envoyer n'importe quoi (qui sera refusé par le serveur via le programme upload.php, mais ce n'est pas une raison pour envoyer des fichiers au hasard).
La question devient donc : comment filtrer les fichiers proposés à l'upload ?


Message édité par Kiosquec le 25-02-2009 à 15:19:49
Reply

Marsh Posté le 25-02-2009 à 15:58:16    

j'avais pas vu ton 2ième message disant que c'était sur pda. Donc c'est mort en html/JS :/ Par contre, y'a pas des API en java pour les PDA? Parce que tu pourrais faire un programme en java (ou en C/C++ après tout). dans ton 1er message, t'as juste parlé de script, mais c'est pas forcément un script en techno web finalement...


Message édité par rufo le 25-02-2009 à 16:00:23

---------------
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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed