- Как вы получаете список имен всех файлов, присутствующих в каталоге в Node.js?
- 22 ответа
- Использование обещаний с ES7
- Асинхронное использование с mz / fs
- Обновление для рекурсивного листинга
- Из коробки
- Пользовательский объект
- Применение
- Исправление проблем
- Исправлены окончания строк
- Пример сгенерированной структуры файла уценки ‘directoryList.md’
- Нерекурсивная версия
- Как вывести список всех файлов в папке, используя Javascript
- контекст
- Вопрос
- 4 ответа
- Как в node js получить список js файлов в папке и подпапках?
- JavaScript — получить список файлов из опр. папки на сервере
- Как вывести список всех файлов в папке, используя Javascript
- контекст
- Вопрос
Как вы получаете список имен всех файлов, присутствующих в каталоге в Node.js?
Я пытаюсь получить список имен всех файлов, присутствующих в каталоге, используя Node.js. Я хочу вывод, который является массивом имен файлов. Как я могу это сделать?
22 ответа
Разница между этими двумя методами заключается в том, что первый метод является асинхронным, поэтому вы должны предоставить функцию обратного вызова, которая будет выполняться после завершения процесса чтения.
Второй является синхронным, он вернет массив имен файлов, но остановит дальнейшее выполнение вашего кода, пока не завершится процесс чтения.
IMO самый удобный способ выполнить такие задачи — использовать инструмент glob. Вот глобальный пакет для node.js. Установить с
Затем используйте подстановочный знак для сопоставления имен файлов (пример взят с сайта пакета)
Использование обещаний с ES7
Асинхронное использование с mz / fs
Модуль mz предоставляет многообещающие версии библиотеки базовых узлов. Использовать их просто. Сначала установите библиотеку .
В качестве альтернативы вы можете написать их в асинхронных функциях в ES7:
Обновление для рекурсивного листинга
Некоторые пользователи указали желание увидеть рекурсивный список (хотя и не в вопросе) . Используйте <
Это TypeScript, опционально рекурсивный, опционально протоколирование ошибок и асинхронное решение. Вы можете указать регулярное выражение для имен файлов, которые вы хотите найти.
Я использовал fs-extra , потому что это простое улучшение супер-набора fs .
Используйте npm список содержимого. Он читает содержимое и под-содержимое данного каталога и возвращает список путей к файлам и папкам.
Ответ выше не выполняет рекурсивный поиск в каталоге. Вот что я сделал для рекурсивного поиска (с помощью прогулки по узлам: npm install walk )
Это сработает и сохранит результат в файле test.txt, который будет находиться в том же каталоге
Если кто-то все еще ищет это, я делаю это:
И его работа очень хорошо для меня
Получить файлы во всех подкаталогах
Из коробки
Если вам нужен объект со структурой каталогов , я настоятельно рекомендую вам проверить дерево каталогов.
Допустим, у вас есть такая структура:
Пользовательский объект
В противном случае, если вы хотите создать объект дерева каталогов с вашими пользовательскими настройками , посмотрите следующий фрагмент. Живой пример виден на этом codeandbox.
Тогда вы можете просто сделать:
Я сделал модуль узла для автоматизации этой задачи: mddir
Применение
Узел mddir «../relative/path/»
Для установки: npm установить mddir -g
Чтобы сгенерировать уценку для текущего каталога: mddir
Для генерации для любого абсолютного пути: mkdir / absolute / path
Чтобы сгенерировать относительный путь: mddir
MD-файл генерируется в вашем рабочем каталоге.
В настоящее время игнорирует node_modules и папки .git.
Исправление проблем
Если вы получаете сообщение об ошибке «узел \ r: нет такого файла или каталога», проблема заключается в том, что ваша операционная система использует разные окончания строк, и mddir не сможет их проанализировать без явного задания стиля окончания строк в Unix. Обычно это влияет на Windows, но также и на некоторые версии Linux. Установка конца строки в стиле Unix должна выполняться в глобальной папке bin mddir npm.
Исправлены окончания строк
Получить путь к папке npm bin с помощью:
npm config get prefix
Компакт-диск в эту папку
Заварить установить dos2unix
Dos2unix lib / node_modules / mddir / src / mddir.js
Это преобразует окончания строк в Unix вместо Dos
Затем запустите как обычно с: node mddir «../relative/path/».
Пример сгенерированной структуры файла уценки ‘directoryList.md’
Нерекурсивная версия
Вы не говорите, что хотите сделать это рекурсивно, поэтому я предполагаю, что вам нужны только прямые дочерние элементы каталога.
Взял общий подход @ Hunan-Rostomyan, сделал его немного более кратким и добавил excludeDirs аргумент. Расширить с помощью includeDirs было бы тривиально, просто следуйте той же схеме:
Начиная с узла 10.10.0, можно использовать новую опцию withFileTypes для fs.readdir и fs.readdirSync в сочетании с функцией dirent.isDirectory() для фильтрации имен файлов в каталоге. Это выглядит так:
Возвращенный массив имеет вид:
Обратите внимание, что fileList слишком оптимистичен. Для чего-то серьезного, добавьте обработку ошибок.
Чтение файлов async :
Чтение файлов sync :
По вашему вопросу я предполагаю, что вам не нужны имена каталогов, только файлы.
Если вы хотите просто массив путей к файлам, используйте return_object: false :
Вот простое решение, использующее только собственные модули fs и path :
Или асинхронная версия (вместо нее используется fs.readdir ):
Тогда вы просто звоните (для синхронизации версии):
Или асинхронная версия:
Разница в том, как блокирует узлы при выполнении ввода-вывода. Учитывая, что API выше, то же самое, вы можете просто использовать асинхронную версию, чтобы обеспечить максимальную производительность.
Однако есть одно преимущество использования синхронной версии. Некоторый код легче выполнить, как только завершится обход, как в следующем операторе после обхода. В асинхронной версии вам понадобится дополнительный способ узнать, когда вы закончите. Возможно, сначала создайте карту всех путей, а затем перечислите их. Для простых сценариев сборки / утилит (против высокопроизводительных веб-серверов) вы можете использовать синхронизирующую версию без какого-либо ущерба.
Просто наперед: если вы планируете выполнять операции с каждым файлом в каталоге, попробуйте vinyl-fs (который используется gulp, системой потоковой сборки).
Получить sorted имен файлов. Вы можете фильтровать результаты по определенным extension , таким как ‘.txt’ , ‘.jpg’ и так далее.
Источник
Как вывести список всех файлов в папке, используя Javascript
контекст
Здравствуйте, я хотел бы перечислить все файлы в папке, поэтому я сначала подумал сделать это в PHP с помощью PHP scandir() Функция, которая привела к чему-то вроде этого:
Но затем я осознал, что хочу отсканировать все видео в своей папке, чтобы отобразить их и дать возможность локальному пользователю кликнуть по любому из них; использование JavaScript может быть хорошей идеей.
Вопрос
Возможно ли сделать это в Javascript? Это хорошая идея, чтобы использовать его вместо php?
РЕДАКТИРОВАТЬ: конечной целью этого является запуск фильма, точно так же, как Netflix или все известные сайты, связанные с фильмами делают
4 ответа
Учитывая ваш комментарий по созданию чего-то похожего на клон Netflix, я бы посоветовал сделать конечную точку PHP, которая экспортирует список файлов в формате JSON. При этом я не предлагаю вам создавать файловый браузер, который позволяет вводить данные пользователем, поскольку во многих случаях это откроет вас для атак через каталоги, и злонамеренный пользователь сможет получить доступ ко всему вашему серверу. Это можно сделать правильно, но это сложно.
Вместо этого, почему бы не иметь базу данных, которая содержит имена файлов, типы, пути, ключевые слова, пути миниатюрных изображений и т. Д. Затем используйте клиентский JavaScript-код для отправки запросов через ajax к сценарию PHP, который обрабатывает доступ к базе данных и полностью контролирует доступ к файлам. Таким образом, когда пользователь нажимает на видео, вы можете затем вызвать другую конечную точку, которая запускает веб-сокет для потоковой передачи видео, и пользователь не может злонамеренно бродить по вашему серверу или загружать / красть ваши видеофайлы напрямую.
Вот пример перечисления некоторых файлов с вашего сервера. Для простоты кода я предполагаю, что jQuery здесь, но вы можете использовать другую библиотеку или собственный объект XMLHttpRequest:
Пример конечной точки PHP для просмотра фильмов:
Браузеры не могут читать такие файлы пользователя. Однако это очень легко (и часто) с использованием Node и встроенного модуля ‘fs’.
Вам нужно будет установить узел: https://nodejs.org/en/
Затем сохраните приведенный выше код в файле.js и запустите его с узлом (используя терминал):
Нет, если вы не запускаете сервер узла.
что вы можете сделать, это распечатать $a или же $b внутри HTML это выглядит так:
Пример Ajax будет состоять из двух файлов: один с вашим HTML и Javascript и другой файл для вызова вашего PHP. Ajax предназначен для вызова с событием, например onclick, или вы можете просто вызвать функцию ajax, как показано ниже.
Источник
Как в node js получить список js файлов в папке и подпапках?
Асинхронно (и последовательно) это выглядит чуток веселее:
UPD: Добавил проверку расширения файла чтобы в список попадали только *.js файлы
Александр Прозоров, Ок, вы наверное тоже не дочитали.
Note: for. in should not be used to iterate over an Array where the index order is important.
Не должен использоваться, где ВАЖЕН порядок индекса.
Следовательно, это не значит что это плохая идея.
Индексы массива являются просто перечислимыми свойствами с целочисленными именами и в остальном идентичны общим свойствам объекта. Нет гарантии, что for . in вернет индексы в любом конкретном порядке. Оператор цикла for . in вернет все перечисляемые свойства, в том числе с нецелыми именами и наследуемыми.
Источник
JavaScript — получить список файлов из опр. папки на сервере
По мотивам предыдущей темы, решил сделать это на html, используя jPlayer. Проблема вот в чем: для преера вручную создавать список файлов тот еще геморрой, нужно это сделать автоматом при загрузке страницы. Как чекнуть файлы в определенной папке с помощью яваскрипта?
Ты хочешь javascriptом, выполняемым на стороне клиента, чекать файлы в определенной директории на сервере, я правильно понял?
Да. Это невозможно? Ну в принципе можно и php подключить, просто думал что на яваскрипте такое возможно.
А как ты себе это представляешь, если код исполняется клиентом?
Ну в принципе можно и php подключить, просто думал что на яваскрипте такое возможно.
Серверным если только.
Возможно, WebDAV как один из вариантов? Обычный HTTP не выдаст тебе списка файлов (и правильно сделает).
Обычный HTTP не выдаст тебе списка файлов (и правильно сделает).
Ну, это фича используемого http-сервера, а не самого протокола. Даже если ОП включит это в своем сервере, как он будет получать этот список, парсить получаемую страницу?
А WebDAV, наверное, можно заюзать через какую-нибудь js библиотеку.
Хотя, возможно, я полную чушь несу, в вебе я нуб.
Ну, это фича используемого http-сервера, а не самого протокола. Даже если ОП включит это в своем сервере, как он будет получать этот список, парсить получаемую страницу?
Кстати, если можно изменить шаблон, используемый вэб-сервером для генерации таких страниц, то тогда можно сделать шаблон, который будет отдавать JSON.
А вообще ТСу заняться нечем похоже.
А WebDAV, наверное, можно заюзать через какую-нибудь js библиотеку.
Легче заюзать простейший скрипт на чем угодно на серверной стороне.
Получай скриптом на сервере и отдавай жсоном. Не будешь же индексы давать.
Как чекнуть файлы в определенной папке с помощью яваскрипта?
Возможно, WebDAV как один из вариантов?
наркоманы на лоре
Как чекнуть файлы в определенной папке с помощью яваскрипта?
В частном случае — зависит от сервера: либо открываешь индексы в апаче (хотя, как тебе тут объяснили, это ССЗБ), либо, если ты на амазоне хостишься, используешь для получения списка файлов AWS API, либо ещё какой изврат.
В общем случае — никак (если хостинг статический), но если серверсайд есть, пилишь серверный скрипт, который возвращает список файлов в json.
А вообще ТСу заняться нечем похоже.
Источник
Как вывести список всех файлов в папке, используя Javascript
контекст
Здравствуйте, я хотел бы перечислить все файлы в папке, поэтому я сначала подумал сделать это в php с помощью функции PHP scandir() , которая привела к чему-то вроде этого:
Но затем я осознал, что хочу отсканировать все видео в своей папке, чтобы отобразить их и дать возможность локальному пользователю кликнуть по любому из них; использование JavaScript может быть хорошей идеей.
Вопрос
Возможно ли сделать это в Javascript? Это хорошая идея, чтобы использовать его вместо php?
РЕДАКТИРОВАТЬ: конечной целью этого является запуск фильма, точно так же, как Netflix или все известные сайты, связанные с фильмами делают
Браузеры не могут читать пользовательские файлы, подобные этому. Однако это очень легко (и часто) с использованием Node и встроенного модуля ‘fs’.
Вам нужно будет установить узел: https://nodejs.org/en/
Затем сохраните приведенный выше код в файле .js и запустите его с узлом (используя терминал):
Учитывая ваш комментарий по созданию чего-то похожего на клон Netflix, я бы посоветовал сделать конечную точку PHP, которая экспортирует список файлов в формате JSON. При этом я не предлагаю вам создавать файловый браузер, который позволяет вводить данные пользователем, поскольку во многих случаях это откроет вас для атак через каталоги, и злонамеренный пользователь сможет получить доступ ко всему вашему серверу. Это можно сделать правильно, но это сложно.
Вместо этого, почему бы не иметь базу данных, которая содержит имена файлов, типы, пути, ключевые слова, пути миниатюрных изображений и т.д. Затем используйте клиентский JavaScript-код для отправки запросов через ajax к сценарию PHP, который обрабатывает доступ к базе данных и полностью контролирует доступ к файлам. Таким образом, когда пользователь нажимает на видео, вы можете затем вызвать другую конечную точку, которая запускает веб-сокет для потоковой передачи видео, и пользователь не может злонамеренно бродить по вашему серверу или загружать/красть ваши видеофайлы напрямую.
Вот пример перечисления некоторых файлов с вашего сервера. Для простоты кода я предполагаю, что здесь используется jQuery, но вы можете использовать другую библиотеку или собственный объект XMLHttpRequest:
Пример конечной точки PHP для просмотра фильмов:
Источник