javascript - una - visualizzare elenco file sito web



il modo migliore per ottenere la cartella e l'elenco dei file in Javascript (1)

Nel mio progetto uso questa funzione per ottenere enormi quantità di file. È abbastanza veloce (mettere require("FS") per renderlo ancora più veloce):

var _getAllFilesFromFolder = function(dir) {

    var filesystem = require("fs");
    var results = [];

    filesystem.readdirSync(dir).forEach(function(file) {

        file = dir+'/'+file;
        var stat = filesystem.statSync(file);

        if (stat && stat.isDirectory()) {
            results = results.concat(_getAllFilesFromFolder(file))
        } else results.push(file);

    });

    return results;

};

l'uso è chiaro:

_getAllFilesFromFolder(__dirname + "folder");

Sto usando node-webkit e sto cercando di fare in modo che un utente selezioni una cartella, e restituirò la struttura di directory di quella cartella e otterrò ricorsivamente i suoi figli.

Ho questo funzionamento abbastanza semplicemente con questo codice (in un controller angolare).

var fs = require('fs');

    $scope.explorer=[];
    $scope.openFile = function(){
            $scope.explorer = [tree_entry($scope.path)];    
            get_folder($scope.path, $scope.explorer[0].children);
    };

    function get_folder(path, tree){
        fs.readdir(path, function(err,files){
            if (err) return console.log(err);

            files.forEach( function (file,idx){
                tree.push(tree_entry(file));
                fs.lstat(path+'/'+file,function(err,stats){
                    if(err) return console.log(err);
                    if(stats.isDirectory()){
                        get_folder(path+'/'+file,tree[idx].children);
                    }
                });
            });
        });
        console.log($scope.explorer);

        return;
    }

    function tree_entry(entry){
        return { label : entry, children: []}
    }

Prendendo una cartella di dimensioni moderate con 22 cartelle figlio e circa 4 livelli di profondità, ci vorranno pochi minuti per ottenere l'intera struttura della directory.

C'è qualcosa che sto ovviamente facendo di sbagliato qui? Non posso credere che ci voglia così tanto tempo, visto che sto usando i metodi built-in Node fs. O c'è un modo per ottenere l'intero contenuto di una directory senza toccare ogni singolo file?

Vorrò poter usare un filtro Angolare sui nomi dei file lungo tutta la struttura, e possibilmente anche sui contenuti, quindi ritardare l'elaborazione dell'intero albero non è probabilmente una soluzione che potrebbe funzionare.





filesystems