Moja witryna obsługuje wiele zdjęć z /assets/photos/folderu. Jak uzyskać listę plików w tym folderze za pomocą JavaScript?
ActiveXObjectaby uzyskać dostęp do systemu plików klienta. Więc zapytałem.
Moja witryna obsługuje wiele zdjęć z /assets/photos/folderu. Jak uzyskać listę plików w tym folderze za pomocą JavaScript?
ActiveXObjectaby uzyskać dostęp do systemu plików klienta. Więc zapytałem.
Odpowiedzi:
Bieżący kod poda listę wszystkich plików w folderze, zakładając, że znajduje się on po stronie serwera, na którym chcesz wyświetlić wszystkie pliki:
var fs = require('fs');
var files = fs.readdirSync('/assets/photos/');
Nie, Javascript nie ma dostępu do systemu plików. Javascript po stronie serwera to zupełnie inna historia, ale myślę, że nie masz tego na myśli.
Piszę plik dir.php
var files = <?php $out = array();
foreach (glob('file/*.html') as $filename) {
$p = pathinfo($filename);
$out[] = $p['filename'];
}
echo json_encode($out); ?>;
W swoim skrypcie dodaj:
<script src='dir.php'></script>
i użyj tablicy files []
*.*lub użyj scandir, aby zachować rozszerzenia plików,$out = scandir("."); echo json_encode($out);
W przypadku plików po stronie klienta nie można uzyskać listy plików w lokalnym katalogu użytkownika.
Jeśli użytkownik dostarczył przesłane pliki, możesz uzyskać do nich dostęp za pośrednictwem ich inputelementu.
<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>
Aby uzyskać listę nazw plików w określonym folderze, możesz użyć:
fs.readdir(directory_path, callback_function)
Spowoduje to zwrócenie listy, którą możesz przeanalizować przez proste indeksowanie list, takie jak file[0],file[1]itp.
Zrobiłem inną trasę dla każdego pliku w określonym katalogu. Dlatego przejście do tej ścieżki oznaczało otwarcie tego pliku.
function getroutes(list){
list.forEach(function(element) {
app.get("/"+ element, function(req, res) {
res.sendFile(__dirname + "/public/extracted/" + element);
});
});
Nazwałem tę funkcję, przekazując listę nazw plików w katalogu __dirname/public/extractedi utworzyła inną trasę dla każdej nazwy pliku, którą byłem w stanie wyświetlić po stronie serwera.
Używam następującego (uproszczonego kodu) w przeglądarce Firefox 69.0 (na Ubuntu), aby odczytać katalog i wyświetlić obraz jako część cyfrowej ramki na zdjęcia. Strona jest napisana w formacie HTML, CSS i JavaScript i znajduje się na tym samym komputerze, na którym uruchamiam przeglądarkę. Obrazy również znajdują się na tej samej maszynie, więc nie ma możliwości oglądania ich „z zewnątrz”.
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] + '\"/>');
}
}
Wymaga to wyłączenia zasad security.fileuri.strict_origin_policy. Oznacza to, że może to nie być rozwiązanie, którego chcesz użyć. W moim przypadku uznałem to za w porządku.