Überprüfen Sie, ob eine Datei lokal existiert, nur mit JavaScript

Lesezeit: 6 Minuten

Uberprufen Sie ob eine Datei lokal existiert nur mit JavaScript
JqueryToAddNumbers

Ich möchte überprüfen, ob eine Datei lokal existiert, in der sich die HTML-Datei befindet. Es muss JavaScript sein. JavaScript wird niemals deaktiviert. jQuery ist nicht gut, kann es aber tun.

Übrigens erstelle ich eine Titan-App für Mac, also suche ich nach einer Möglichkeit, meine Dateien vor Leuten zu schützen, die auf “Paketinhalt anzeigen” klicken.

  • Meinst du mit “lokal” auf dem Client-Rechner? Das heißt, das mit dem Browser. Wenn ja, lautet die Antwort nein – Sie haben keinen Dateizugriff. Aber es ist nicht klar, was du meinst.

    – Harfe

    25. Februar 11 um 8:39 Uhr

  • Verstehst du, wie schrecklich unsicher das ist?

    – Turm

    25. Februar 11 um 18:49 Uhr

  • Ich mache das alles auf meinem Computer, also geht es nicht auf einen Server.

    – JqueryToAddNumbers

    26. Februar 11 um 0:17 Uhr

  • Stellen Sie sich trotzdem vor, dass sich die Datei in “assets/index.html” befindet. Ich möchte überprüfen, ob eine Datei in Assets vorhanden ist.

    – JqueryToAddNumbers

    26. Februar 11 um 0:18 Uhr


  • Verwenden Sie Ajax, siehe meine Antwort hier: stackoverflow.com/a/14691735/1981050

    – Matthew James Davis

    4. Februar 13 um 17:24 Uhr

Uberprufen Sie ob eine Datei lokal existiert nur mit JavaScript
dSebastien

Ihre Frage ist mehrdeutig, daher gibt es mehrere mögliche Antworten, je nachdem, was Sie wirklich erreichen möchten.

Wenn Sie, wie ich vermute, eine Desktop-Anwendung mit Titanium entwickeln, können Sie getFile des FileSystem-Moduls verwenden, um das Dateiobjekt abzurufen, und dann mit der Methode “exists” prüfen, ob es existiert.

Hier ist ein Beispiel von der Appcelerator-Website:

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.');
    ...
}

Überprüf den Referenzdokumentation zur getFile-Methode

Und das existiert Methodenreferenzdokumentation

Für diejenigen, die dachten, er frage nach einer üblichen Webentwicklungssituation, dann sind dies die beiden Antworten, die ich gegeben hätte:

1) Sie möchten überprüfen, ob eine serverseitige Datei vorhanden ist. In diesem Fall können Sie mit einer Ajax-Anfrage versuchen, die Datei abzurufen und auf die erhaltene Antwort zu reagieren. Beachten Sie jedoch, dass Sie nur nach Dateien suchen können, die von Ihrem Webserver verfügbar gemacht werden. Ein besserer Ansatz wäre, ein serverseitiges Skript (z. B. PHP) zu schreiben, das die Überprüfung für Sie durchführt, einen Dateinamen erhält und dieses Skript über Ajax aufruft. Beachten Sie auch, dass Sie sehr leicht eine Sicherheitslücke in Ihrer Anwendung/Ihrem Server erstellen können, wenn Sie nicht vorsichtig genug sind.

2) Sie möchten überprüfen, ob eine clientseitige Datei vorhanden ist. In diesem Fall ist es aus Sicherheitsgründen nicht erlaubt (obwohl IE dies in der Vergangenheit über ActiveX und die Klasse Scripting.FileSystemObject erlaubt hat), und es ist in Ordnung (niemand möchte, dass Sie in der Lage sind, ihre Dateien), also vergiss das.

1642588814 361 Uberprufen Sie ob eine Datei lokal existiert nur mit JavaScript
Siubear

Da ‘Kranu’ hilfreich rät, ‘Die einzige Interaktion mit dem Dateisystem besteht darin, js-Dateien zu laden. . .’, was darauf hindeutet, dies mit Fehlerprüfung zu tun, würde Ihnen zumindest sagen, ob die Datei dies tut nicht vorhanden – welche für Ihre Zwecke ausreichend sein können?

Von einem lokal Maschine können Sie überprüfen, ob eine Datei funktioniert nicht existieren indem Sie versuchen, es als externes Skript zu laden und dann nach einem Fehler suchen. Beispielsweise:

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

Einige Notizen…

  • Fügen Sie einige zufällige Daten an den Dateinamen an (url+=”?”+neues Datum usw.), damit der Browser-Cache kein altes Ergebnis liefert.
  • Legen Sie eine eindeutige Element-ID (el.id=) fest, wenn Sie diese in einer Schleife verwenden, damit die get_error-Funktion auf das richtige Element verweisen kann.
  • Das Setzen der Zeile onerror (el.onerror=function) ist ein bisschen komplex, weil man sie braucht, um die get_error-Funktion aufzurufen UND el.id zu übergeben – wenn nur ein normaler Verweis auf die Funktion (z. B.: el.onerror=get_error) gesetzt wäre, dann konnte kein el.id Parameter übergeben werden.
  • Denken Sie daran, dass dies nur überprüft, ob eine Datei vorhanden ist nicht existieren.

  • Vielen Dank, dass Sie sich die Zeit genommen haben, um zu antworten, und mein Grund für das Posten dieser Lösung war, dass andere diesem Thread auf der Suche nach einer Antwort folgen. Ich bin ehrlich gesagt verwirrt von denen, die, wie in diesem Thread, die Zeile “Es geht nicht” beitragen, da dies scheinbar keinen Wert hat.

    – Siubear

    10. Mai 11 um 4:29 Uhr

  • Das Fehlerereignis wird also erst ausgelöst, wenn Sie das Element an das Dokument anhängen? Man könnte es “aus den Augen” anhängen, nehme ich an, aber es wäre noch besser, es überhaupt nicht anhängen zu müssen, wenn das möglich ist.

    – Per Quested Aronsson

    15. Januar 14 um 13:49 Uhr

  • Ich habe dies auf Firefox versucht, mit: url="c:\Windows\Web\js.js";, und es kehrt immer zurück 123 does not exist., unabhängig davon, ob die Datei existiert oder nicht. Ich habe auch versucht: url="file://c:\Windows\Web\js.js"; mit den gleichen Ergebnissen.

    – Kevin Fegan

    20. November 16 um 14:19 Uhr

Sie können dies verwenden

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

  • Wie können Sie dies verwenden, um die Existenz einer Datei zu überprüfen?

    – Chetan Purohit

    29. Januar 16 um 09:17 Uhr

  • @ChetanPurohit – Du würdest es so nennen: var x=LinkCheck("c:\Windows\Web\Wallpaper\img1.jpg");. Testen Sie dann den Wert von x: x ? alert("File Exists") : alert("File Doesn't exist") ; oder if (x){ alert("File Exists"); } else { alert("File Doesn't exist"); }. Leider habe ich dies auf meinem System versucht und es schlägt nach der Zeile fehl: http.open('HEAD', url, false);

    – Kevin Fegan

    20. November 16 um 13:56 Uhr

  • @ChetanPurohit – Ich habe es auch versucht var x=LinkCheck("file://c:\Windows\Web\Wallpaper\img1.jpg");, und dies schlägt fehl nach: http.send();. In beiden Fällen besteht der “Fehler” darin, dass er nicht vom Aufruf an zurückkehrt LinkCheck().

    – Kevin Fegan

    20. November 16 um 14:26 Uhr

  • Danke, dass du @Kevin geantwortet hast

    – Chetan Purohit

    21. November 16 um 11:47 Uhr

  • Im open oben gezeigte Aussage, false zeigt “synchronen” Betrieb an. Ich bin gerade darauf gestoßen: Note: Starting with Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), synchronous requests on the main thread have been deprecated due to the negative effects to the user experience. Verwenden von XMLHttpRequest

    – Kevin Fegan

    19. November 17 um 14:41 Uhr

Javascript kann nicht auf das Dateisystem zugreifen und auf Existenz prüfen. Die einzige Interaktion mit dem Dateisystem besteht darin, js-Dateien und Bilder (png/gif/etc) zu laden.

Javascript ist dafür nicht die Aufgabe

Glücklicherweise ist es (aus Sicherheitsgründen) nicht möglich, mit Standard-JS auf das clientseitige Dateisystem zuzugreifen. Es gibt jedoch einige proprietäre Lösungen (wie Microsofts IE-only ActiveX-Komponente).

1642588814 823 Uberprufen Sie ob eine Datei lokal existiert nur mit JavaScript
Dij

Wenn Sie mit Javascript überprüfen möchten, ob eine Datei vorhanden ist, dann nein, soweit ich weiß, hat Javascript aus Sicherheitsgründen keinen Zugriff auf das Dateisystem. Aber für mich ist nicht klar genug, was Sie versuchen.

1642588814 715 Uberprufen Sie ob eine Datei lokal existiert nur mit JavaScript
Samsky

Eine Alternative: Sie können ein “verstecktes” Applet-Element verwenden, das diese Existenzprüfung mit einem privilegierten Aktionsobjekt implementiert, und Ihre Ausführungsmethode überschreiben, indem Sie:

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

  • Was ist ein >”verstecktes” Applet-Element?

    – clankill3r

    22. Juli 2020 um 12:05 Uhr

.

546590cookie-checkÜberprüfen Sie, ob eine Datei lokal existiert, nur mit JavaScript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy