Liste der Dateinamen im Ordner mit Javascript abrufen

84

Meine Website liefert viele Bilder aus dem /assets/photos/Ordner. Wie kann ich mit Javascript eine Liste der Dateien in diesem Ordner erhalten?

bevanb
quelle
5
Was hast du versucht? Und in welchem ​​Kontext möchten Sie die Liste der Dateien abrufen ... Vom Browser oder von einem Server mit node.js?
David Barker
Und welche Browser unterstützen Sie?
Simpal Kumar
@ Mike dies ist nur für die neueste Version von Chrome
bevanb
@ Mike Ich bezweifle, dass die Auswahl des Browsers wirklich wichtig ist. Der Browser hat keinen Zugriff auf die Liste der Dateien, es sei denn, der Server zeigt sie an.
Mike Cluck
@ MikeC ya du hast recht. Ich habe über IE nachgedacht, um ActiveXObjectauf das Dateisystem des Client-Systems zuzugreifen. Also habe ich gefragt.
Simpal Kumar

Antworten:

87

Der aktuelle Code enthält eine Liste aller Dateien in einem Ordner, vorausgesetzt, Sie möchten auf der Serverseite alle Dateien auflisten:

var fs = require('fs');
var files = fs.readdirSync('/assets/photos/');
Christoffer Karlsson
quelle
11
Ich wollte vom Client aus auf eine Liste von Dateien zugreifen, leider war das nicht klarer.
Bevanb
8
Woher kommt require () oder ist es definiert ??? Ihr Code weist den Fehler "'require' is not defined" auf. Haben Sie Ihren Code getestet? Wenn ja, haben Sie vielleicht einen wichtigen Teil verpasst, der sich auf "erfordern" bezieht?
Apostolos
5
@Apostolos Wie OP in der Beschreibung feststellt, muss dies serverseitiger Code sein. Sie können dies nicht in einem Browser ausführen. Das Ausführen dieses Skripts mit Node.js führt zu keinen Fehlern.
Naltroc
2
Dies ist ein guter Weg, scheint aber die Frage nicht direkt zu beantworten. Die einfache Antwort lautet Nein. In JS vom Client (Browser) gibt es keine direkte Möglichkeit, eine Liste der Dateien in einem Ordner / Verzeichnis auf der Serverseite abzurufen.
Akshay Hiremath
require () wird nur mit nodejs unterstützt
Dulmina
35

Nein, Javascript hat keinen Zugriff auf das Dateisystem. Serverseitiges Javascript ist eine ganz andere Geschichte, aber ich denke, das meinst du nicht so.

Simpal Kumar
quelle
10
Das stimmt nicht mehr. Die Datei-API ist eine Sache.
Superluminary
1
@superluminary, wie könnte man das dann mit dieser API machen?
2540625
@jtheletter Die API wird auf dem Server ausgeführt, sodass Sie den Stapel verwenden, den Sie auf Ihrem Server ausgeführt haben. Wenn das Node ist, wäre es fs.readdir.
Superluminary
1
Wenn Sie sagen, dass eine Bibliothek verwendet werden muss, entspricht dies nicht ganz der Aussage, dass JavaScript (Vanille) Zugriff auf das Dateisystem hat.
2540625
13

Ich schreibe eine Datei dir.php

var files = <?php $out = array();
foreach (glob('file/*.html') as $filename) {
    $p = pathinfo($filename);
    $out[] = $p['filename'];
}
echo json_encode($out); ?>;

Fügen Sie in Ihrem Skript Folgendes hinzu:

<script src='dir.php'></script>

und verwenden Sie das Array files []

IfThenElse
quelle
Wie ruft man die Dateien [] var mit Javascript auf / benutzt sie?
Leths
1
Nicht erfasster Syntaxfehler: Unerwartetes Token '<'
2540625
1
@ 2540625 das ist PHP, nicht reines Javascript. Obwohl Sie PHP benötigen und es das Problem des Autors nicht löst, ist es immer noch eine ziemlich gute Lösung, wenn Sie PHP haben.
windowsboy111
Wenn Sie alternativ alle Dateien *.*auflisten möchten, verwenden Sie entweder scandir oder scandir, um Dateierweiterungen beizubehalten.$out = scandir("."); echo json_encode($out);
Stardust
Dies ist kein Javascript
Scitronboy
10

Bei clientseitigen Dateien können Sie keine Liste der Dateien im lokalen Verzeichnis eines Benutzers abrufen.

Wenn der Benutzer hochgeladene Dateien bereitgestellt hat, können Sie über sein inputElement darauf zugreifen .

<input type="file" name="client-file" id="get-files" multiple />


<script>
var inp = document.getElementById("get-files");
// Access and handle the files 

for (i = 0; i < inp.files.length; i++) {
    let file = inp.files[i];
    // do things with file
}
</script>
Naltroc
quelle
4

Um die Liste der Dateinamen in einem bestimmten Ordner abzurufen, können Sie Folgendes verwenden:

fs.readdir(directory_path, callback_function)

Dies gibt eine Liste zurück, die Sie durch einfache Listenindizierung wie file[0],file[1]usw. analysieren können .

Ahmad Zafar
quelle
2

Ich habe für jede Datei in einem bestimmten Verzeichnis eine andere Route erstellt. Zu diesem Pfad zu gehen bedeutete daher, diese Datei zu öffnen.

function getroutes(list){
list.forEach(function(element) {
  app.get("/"+ element,  function(req, res) {
    res.sendFile(__dirname + "/public/extracted/" + element);
  });
});

Ich habe diese Funktion aufgerufen und die Liste der Dateinamen im Verzeichnis übergeben. __dirname/public/extractedFür jeden Dateinamen, den ich auf der Serverseite rendern konnte, wurde eine andere Route erstellt.

Tanmay_Gupta
quelle
1

Ich verwende den folgenden (abgespeckten Code) in Firefox 69.0 (unter Ubuntu), um ein Verzeichnis zu lesen und das Bild als Teil eines digitalen Fotorahmens anzuzeigen. Die Seite wurde in HTML, CSS und JavaScript erstellt und befindet sich auf demselben Computer, auf dem ich den Browser ausführe. Die Bilder befinden sich ebenfalls auf demselben Computer, sodass keine Anzeige von "außen" erfolgt.

var directory = <path>;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', directory, false); // false for synchronous request
xmlHttp.send(null);
var ret = xmlHttp.responseText;
var fileList = ret.split('\n');
for (i = 0; i < fileList.length; i++) {
    var fileinfo = fileList[i].split(' ');
    if (fileinfo[0] == '201:') {
        document.write(fileinfo[1] + "<br>");
        document.write('<img src=\"' + directory + fileinfo[1] + '\"/>');
    }
}

Dazu muss die Richtlinie security.fileuri.strict_origin_policydeaktiviert sein. Dies bedeutet, dass es möglicherweise keine Lösung ist, die Sie verwenden möchten. In meinem Fall hielt ich es für ok.

pietervanderstar
quelle
-2

Erstellen Sie eine PHP-Datei mit dem Namen 'files.php' mit folgendem Inhalt:

<?php 
$out = array();
foreach (glob('/assets/photos/*') as $filename) {
    $p = pathinfo($filename);
    $out[] = $p['basename'];
}
echo json_encode($out); 
?>

Rufen Sie es dann mit jQuery auf:

$.getJSON('files.php').then(function (response) {
     console.log(response);
});
emy
quelle