web-dev-qa-db-fra.com

Vérifier si un fichier existe localement en utilisant JavaScript uniquement

Je veux vérifier si un fichier existe localement, où se trouve le fichier HTML. Ce doit être JavaScript. JavaScript ne sera jamais désactivé. jQuery n'est pas bon mais peut faire.

En passant, je crée une application titane pour Mac, donc je cherche un moyen de protéger mes fichiers des personnes qui cliquent sur "Afficher le contenu du paquet".

14
ExceptionSlayer

Votre question est ambiguë. Il existe donc de nombreuses réponses possibles en fonction de vos objectifs.

Si vous développez une application de bureau utilisant Titanium, vous pouvez utiliser le getFile du module FileSystem pour obtenir l'objet fichier, puis vérifier s'il existe à l'aide de la méthode exist.

Voici un exemple tiré du site Web Appcelerator:

var homeDir = Titanium.Filesystem.getUserDirectory();
var mySampleFile = Titanium.Filesystem.getFile(homeDir, 'sample.txt');

if (mySampleFile.exists()) {
    alert('A file called sample.txt already exists in your home directory.');
    ...
}

Consultez la documentation de référence de la méthode getFile

Et la existe de la documentation de référence de méthode

Pour ceux qui pensaient qu'il posait des questions sur une situation de développement Web habituelle, voici les deux réponses que j'aurais données:

1) vous voulez vérifier si un fichier côté serveur existe. Dans ce cas, vous pouvez utiliser une requête ajax pour récupérer le fichier et réagir à la réponse reçue. Toutefois, sachez que vous ne pouvez rechercher que les fichiers exposés par votre serveur Web. Une meilleure approche serait d’écrire un script côté serveur (php, par exemple) qui ferait la vérification pour vous, à partir d’un nom de fichier et appelant ce script via ajax. Sachez également que vous pouvez très facilement créer une faille de sécurité dans votre application/serveur si vous ne faites pas attention.

2) vous voulez vérifier si un fichier côté client existe. Dans ce cas, comme l'ont souligné d'autres personnes, ce n'est pas autorisé pour des raisons de sécurité (bien que IE l'ait déjà autorisé par le passé via ActiveX et la classe Scripting.FileSystemObject) et que tout va bien (personne ne veut de vous pour pouvoir parcourir leurs fichiers), alors oubliez ça.

15
dSebastien

Depuis 'Kranu' conseille utilement 'La seule interaction avec le système de fichiers est avec le chargement de fichiers js. . . ', qui suggère de le faire avec une vérification d'erreur vous dirait au moins si le fichier not n'existe pas - ce qui peut être suffisant pour vos besoins?

À partir de local machine, vous pouvez vérifier si un fichier existen'existe pasen essayant de le charger en tant que script externe, puis en recherchant une erreur. Par exemple:

<span>File exists? </span>
<SCRIPT>
    function get_error(x){
        document.getElementsByTagName('span')[0].innerHTML+=x+" does not exist.";
    }
    url="   (put your path/file name in here)    ";
    url+="?"+new Date().getTime()+Math.floor(Math.random()*1000000);
    var el=document.createElement('script');
    el.id="123";
    el.onerror=function(){if(el.onerror)get_error(this.id)}
    el.src=url;
    document.body.appendChild(el);
</SCRIPT>

Quelques notes... 

  • ajoutez des données aléatoires au nom de fichier (url + = "?" + nouvelle date, etc.) afin que le cache du navigateur ne serve pas un ancien résultat.
  • définissez un ID d'élément unique (el.id =) si vous l'utilisez dans une boucle, de sorte que la fonction get_error puisse référencer l'élément correct.
  • définir la ligne onerror (el.onerror = function) est un complexe car on en a besoin pour appeler la fonction get_error ET transmettre el.id - si une référence normale à la fonction (par exemple: el.onerror = get_error) a été définie, alors aucun paramètre el.id ne pourrait être passé.
  • rappelez-vous que cela ne fait que vérifier si un fichiern'existe pas.
10
Siubear

Vous pouvez utiliser ceci

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}
8
Jess Stone

Javascript ne peut pas accéder au système de fichiers et vérifier son existence. La seule interaction avec le système de fichiers consiste à charger des fichiers js et des images (png/gif/etc). 

Javascript n'est pas la tâche pour cela

4
Kranu

Si vous voulez vérifier si le fichier existe en utilisant javascript, alors non, pour autant que je sache, javascript n'a pas accès au système de fichiers pour des raisons de sécurité .. Mais quant à moi, il est difficile de savoir ce que vous essayez de faire. ..

3
Andrey

Heureusement, il n’est pas possible (pour des raisons de sécurité) d’accéder au système de fichiers côté client avec JS standard. Cependant, certaines solutions propriétaires existent (comme le composant ActiveX exclusivement Microsoft d’IE). 

3
John Manak

Une alternative: Vous pouvez utiliser un élément d’applet "caché" qui implémente ce exist-check en utilisant un objet action privilégié et redéfinit votre méthode d’exécution en:

File file = new File(yourPath);
return file.exists();
2
Samsky

L’une des méthodes que j’ai trouvée consiste à créer une balise img et à définir l’attribut src sur le fichier que vous recherchez. Onload ou onerror de l'élément img se déclenchera selon que le fichier existe ou non. Vous ne pouvez charger aucune donnée à l'aide de cette méthode, mais vous pouvez déterminer si un fichier particulier existe ou non.

1
MEC

Essaye ça:

window.onclick=(function(){
  try {
    var file = window.open("file://mnt/sdcard/download/Click.ogg");
    setTimeout('file.close()', 100);
    setTimeout("alert('Audio file found. Have a Nice day!');", 101);
  } catch(err) {
    var wantstodl=confirm("Warning:\n the file, Click.ogg is not found.\n do you want to download it?\n "+err.message);
    if (wantstodl) {
      window.open("https://www.dropbox.com/s/qs9v6g2vru32xoe/Click.ogg?dl=1"); //downloads the audio file
    }
  }
});
0
Samuel Tees