Upload automatique d'un fichier

Upload automatique d'un fichier - HTML/CSS - Programmation

Marsh Posté le 09-06-2009 à 09:05:07    

Bonjour a tous,
 
Voici la problématique que je rencontre: l'utilisateur fait une action avec un logiciel et celui-ci génère un fichier texte. Je veux récupérer ce fichier texte automatiquement pour l'uploader vers un script php par exemple en vue de mettre a jour une base de donnée. En plus de faire le fichier texte, le logiciel ouvre automatiquement un navigateur a la fin du processus.
 
La contrainte: l'utilisateur ne doit rien avoir a faire !, on ne peut donc pas dans la page web afficher un formulaire pour que l'utilisateur clic sur parcourir, choisisse le fichier et ensuite l'upload.
 
Je pensais faire un javascript qui onload de la page submit le formulaire mais le problème c'est qu'on ne peut pas donner de valeur a un champ input type="file". Ce qui se comprend assez bien car sinon n'importe quel site pourrait voler des fichiers aux visiteurs.
 
Y'a-t-il une façon de faire ce que je veux ? Au pire l'utilisateur accepte de faire juste un seul clic "simple" dans la page ouverte par le logiciel.

Reply

Marsh Posté le 09-06-2009 à 09:05:07   

Reply

Marsh Posté le 09-06-2009 à 09:51:39    

Si ce logiciel est capable de créer un fichier texte, et de lancer le navigateur, alors il est très fort, et devrait aussi être capable de lancer FTP ou l'envoi d'un mail.

Reply

Marsh Posté le 09-06-2009 à 10:09:59    

FTP je sais pas, mail a la limite mais c'est pas sur. Mais comment une application php peut-elle recevoir un mail ? (le but serait d'en traiter le contenu pour ensuite faire des insertions dans une DB).

Reply

Marsh Posté le 09-06-2009 à 10:12:54    

tu as moyen de modifier du coté de ton logiciel en amont la page web appelée? sinon, j'ai peur que tu ais répondu toi même à ta question:

cimourdain a écrit :

le problème c'est qu'on ne peut pas donner de valeur a un champ input type="file". Ce qui se comprend assez bien car sinon n'importe quel site pourrait voler des fichiers aux visiteurs

 

par contre si oui, eh bien ton logiciel peut lancer un wget (ou équivalent) en précisant le fichier à envoyer, et roulez jeunesse... http://www.google.fr/search?q=upload+wget

Message cité 1 fois
Message édité par pataluc le 09-06-2009 à 10:16:44
Reply

Marsh Posté le 09-06-2009 à 10:56:10    

Une appli php peut lire des mails en se connectant à une boîte mail vua imap ou pop3 (voir la fonction imap_open() : http://www.php.net/manual/fr/function.imap-open.php ). Je l'ai fait y'a pas longtemps avec une boîte sous Lotus Notes. Et pour envoyer un mail, y' a la fonction mail() et tu trouveras pleins de codes sources de class envoyant des mails avec des pièces jointes.
 
Après, pour envoyer un fichier automatiquement avec du javascript, essaye ce code sous Internet Explorer 6 :

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


 
C'est tiré d'un plugin que j'ai fait pour l'appli Astres (cf ma signature) et qui permet d'envoyer en post un fichier attaché via de l'ajax. Bon, tu laisses de côté le switch() avec "aow" et "knowledge" qui sont 2 modes de fonctionnement pour 2 formulaires différents (le plugin servant à ces 2 formulaires). L'idée de base réside dans le fait que le javascript peut lire octet par octet un fichier sur le hdd. Par contre, dans mon script, c'est l'utilisateur qui sélectionne le fichier... Mais je pense que ça vaut le coup de tester...


---------------
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 09-06-2009 à 10:57:59    

Reply

Marsh Posté le 09-06-2009 à 13:35:27    

pataluc a écrit :

tu as moyen de modifier du coté de ton logiciel en amont la page web appelée? sinon, j'ai peur que tu ais répondu toi même à ta question:


 

pataluc a écrit :


 
par contre si oui, eh bien ton logiciel peut lancer un wget (ou équivalent) en précisant le fichier à envoyer, et roulez jeunesse... http://www.google.fr/search?q=upload+wget


 
 
je suis pas sur d'avoir bien compris ce que tu voulais dire

Reply

Marsh Posté le 09-06-2009 à 13:46:27    

ce que je veux dire, c'est ca:
 
tu nous explique que ton logiciel machintruc génère un fichier texte et que tu veux l'envoyer à un script php. ma question est: as tu moyen de modifier le logiciel machintruc? si oui, tu peux faire en sorte qu'il envoie directement le fichier...

Reply

Sujets relatifs:

Leave a Replay

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