212 votes

Comment ouvrir un fichier de disque local avec JavaScript ?

J'ai essayé d'ouvrir le fichier avec

window.open("file:///D:/Hello.txt");

Le navigateur ne permet pas d'ouvrir un fichier local de cette manière, probablement pour des raisons de sécurité. Je veux utiliser les données du fichier du côté client. Comment puis-je lire le fichier local en JavaScript ?

306voto

Paolo Moretti Points 9519

Voici un exemple utilisant FileReader :

function readSingleFile(e) {
  var file = e.target.files[0];
  if (!file) {
    return;
  }
  var reader = new FileReader();
  reader.onload = function(e) {
    var contents = e.target.result;
    displayContents(contents);
  };
  reader.readAsText(file);
}

function displayContents(contents) {
  var element = document.getElementById('file-content');
  element.textContent = contents;
}

document.getElementById('file-input')
  .addEventListener('change', readSingleFile, false);

<input type="file" id="file-input" />
<h3>Contents of the file:</h3>
<pre id="file-content"></pre>

Specs

http://dev.w3.org/2006/webapi/FileAPI/

Compatibilité des navigateurs

  • IE 10+ (EN ANGLAIS)
  • Firefox 3.6+.
  • Chrome 13+.
  • Safari 6.1 et plus

http://caniuse.com/#feat=fileapi

0 votes

Merci, j'ai essayé et ça a marché ( fileVariable.name ).

1 votes

Juste une seconde, quand je recharge le même dernier fichier, le contenu ne change pas (je parle de son contenu, quand je modifie le texte du fichier). Pouvez-vous m'aider ?

1 votes

@SamusHands Oui, vous avez raison, je peux reproduire le problème dans Safari et Chrome (il fonctionne bien dans Firefox). En définissant la valeur de l'entrée à null sur chaque onClick devrait faire l'affaire, vous voyez : stackoverflow.com/a/12102992/63011

70voto

HBP Points 6676

Le site Installation de fileReader HTML5 vous permet de traiter des fichiers locaux, mais ceux-ci DOIVENT être sélectionnés par l'utilisateur, vous ne pouvez pas aller fouiller sur le disque de l'utilisateur à la recherche de fichiers.

Je l'utilise actuellement avec les versions de développement de Chrome (6.x). Je ne sais pas quels autres navigateurs le supportent.

3 votes

C'est vrai, c'est maintenant possible avec HTML5. Regardez ici

1 votes

Un examen rapide de la spécification référencée (dernière mise à jour 2012-07-12) ne montre aucune possibilité d'écriture de fichier, seulement de lecture.

1 votes

@Flavien Volken non, c'est impossible. Les fichiers locaux DOIVENT être sélectionnés par l'utilisateur

3voto

Adeel Points 9888

Ce n'est pas possible. Il faut soit utiliser un serveur web où le fichier peut être téléchargé et ensuite utiliser son contenu, soit écrire une extension pour le navigateur.

2voto

markcial Points 2341

Vous pourriez peut-être essayer d'utiliser Flash si vous voulez gérer des données côté client :

Un exemple : http://www.adylevy.com/index.php/2009/06/07/client-side-image-resize-flash-cs4-filereferencedata/

-9voto

Javascript ne peut généralement pas accéder aux fichiers locaux dans les nouveaux navigateurs mais l'objet XMLHttpRequest peut être utilisé pour lire des fichiers. C'est donc bien Ajax (et non Javascript) qui lit le fichier.

Si vous voulez lire le fichier abc.txt vous pouvez écrire le code comme suit :

var txt = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
  if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
    txt = xmlhttp.responseText;
  }
};
xmlhttp.open("GET","abc.txt",true);
xmlhttp.send();

Maintenant txt contient le contenu du fichier abc.txt.

4 votes

@TheMuffinMan et XML.(Asynchronus Javascript et XML)

12 votes

Cette réponse n'est pas pertinente car l'op a demandé comment ouvrir des fichiers qui résident du côté client, et non des fichiers qui résident sur le serveur.

4 votes

@ThomasNguyen, cette question est le premier résultat google de "javascript open file" et cette réponse bénéfique néanmoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X