Перейти к содержимому
Все статьи
Разработка

Из папки загрузились только 100 файлов: проверяем readEntries

·27 октября 2026 г.· 6 мин чтения
Сколько будет стоить ваш проект?Рассчитать стоимость

Если из выбранной папки загрузились только 100 файлов, проверьте, не вызван ли readEntries() всего один раз. В Chromium он возвращает записи порциями; для полного обхода повторяют чтение у того же reader до пустого массива. Это не общий лимит браузера на число файлов и ещё не доказательство ошибки сервера.

Потеря могла произойти до первого запроса загрузки

Интерфейс сообщает об успешной загрузке всего, что получил список отправки. Но сам список может быть неполным: каталог ещё не дочитан или вложенная папка не пройдена. Поэтому сначала сравните выбор пользователя, результат перечисления и подтверждённые сервером файлы.

В справке MDN по readEntries отдельно отмечены первые 100 записей за вызов в браузерах Chromium. Речь о FileSystemEntry, среди которых могут быть файлы и каталоги. Нельзя автоматически переименовать этот предел порции в ограничение на загрузку ста файлов.

Один reader нужно дочитать, а не создавать заново

В примере createReader на MDN чтение повторяется с накоплением порций до пустого массива. Один reader хранит состояние обхода соответствующего каталога. Если каждый раз создавать новый, ваша программа не продолжает прежний обход тем способом, который предполагала.

Организуйте последовательность: получить порцию, обработать её, запросить следующую, завершить после подтверждённого окончания. Не принимайте произвольную длину непустой порции за универсальный признак конца. И не запускайте бесконтрольные параллельные чтения одного reader ради ускорения.

Для найденного подкаталога нужен собственный обход его содержимого. Чтение корня само по себе не означает, что все вложенные файлы уже перечислены. Сохраняйте связь с относительным расположением, чтобы одинаковые имена в двух папках не превратились в одну запись.

Учебный набор с двумя уровнями вложенности

Предположим, в корне есть 230 файлов и одна вложенная папка с двумя файлами. Это вымышленный набор: реальные каталоги здесь не читались и не отправлялись. В учебном ходе корень вернул порции 100, 100, 31 и затем 0 записей. Конкретная разбивка не объявлена обязательной для всех реализаций.

Этап проверкиУчебное количествоЧто это означаетКакое подтверждение нужно
Перечисление корня231 запись230 файлов и одна папкаОбход корня завершился пустой порцией
Перечисление вложенного каталога2 файлаОтдельный дочерний обходДочерний reader тоже дошёл до конца
Итоговый перечень файлов232Папка не посчитана дополнительным файломДля каждого файла есть относительное расположение
Передано на загрузку231Один файл отменён до отправкиУ отмены есть отдельный статус
Принято сервером229Подтверждено успешным результатомЕсть ответ по каждой принятой записи
Ошибки отправленных файлов2Они не включены в принятыеОстались причины и возможность разбора

В этой модели 229 принятых + 2 ошибки + 1 отмена = 232 перечисленных файла. Счётчики сходятся, но загрузка не является полностью успешной. Пользователь должен видеть незавершённые результаты и понимать, что можно повторить, а что он отменил сам.

Относительный путь — часть идентичности записи

Файлы договор.pdf в двух разных учебных подпапках нельзя объединять по одному имени. Для перечня загрузки храните выбранное относительное расположение и собственный идентификатор записи. При повторе отправки это помогает не спутать два одноимённых объекта.

Относительное расположение из клиентского списка не должно автоматически становиться готовым путём записи на сервере. Получатель проверяет допустимость структуры и назначает безопасное размещение по правилам приложения. Полнота обхода и безопасность сохранения — связанные, но разные задачи.

Если используется другой способ выбора каталога, сначала выясните его интерфейс и доступные сведения. Нельзя переносить поведение readEntries() на любой API или поле выбора файлов по сходству результата. В диагностике укажите точный механизм, а не только слово «папка».

Как отличить перечисление от загрузки

Для перечисления отслеживают полученные порции, посещённые каталоги и возникшие ошибки чтения. Для загрузки — выбранные к отправке файлы, ответы сервера и отмены. Процент принятых от уже неполного списка не показывает полноту относительно исходного выбора.

Если чтение дочерней папки не завершилось, не объявляйте окончательное число файлов известным. Сохраните неопределённость и покажите проблему обхода отдельно. Иначе пользователь получит аккуратное «100%», у которого неверный знаменатель.

Не определяйте успешность только по завершению последнего сетевого запроса. В очереди могли оставаться неотправленные записи или ранее завершившиеся ошибки. Итог строится по состояниям всех известных элементов и признаку окончания перечисления.

Какие ограничения всё же нужны

Полный обход не означает отправку всех файлов одновременно. Для приложения отдельно задают допустимые объём, число параллельных передач, отмену и обработку слишком большого набора. Эти ограничения должны быть видимыми условиями продукта, а не случайным обрывом после первой порции.

Если часть файлов исключается по формату или размеру, объясните это до итогового сообщения. Отфильтрованный объект, отменённый пользователем и не принятый сервером требуют разных статусов. Тогда повтор импорта не будет начинаться с догадки, куда исчез документ.

Как принять исправленный импорт

  1. Зафиксируйте используемый API выбора и подготовьте учебный набор больше одной порции.
  2. Добавьте вложенный каталог и одноимённые файлы в разных местах.
  3. Проверьте повторное чтение того же reader до окончания и отдельный обход подкаталогов.
  4. Сравните итоговый перечень с известным учебным составом, учитывая файлы отдельно от папок.
  5. Проверьте ошибку одного файла, отмену и повтор без лишнего дублирования.
  6. Примите итог только при объяснённом состоянии каждой записи и завершённом перечислении.

Этот план нужно выполнить в целевых браузерах тестовой среды. Статья не сообщает о проведённом испытании вашего импорта. Проверка одного маленького каталога недостаточна: она может вообще не задеть границу порции и вложенные записи.

Что записать в задачу разработчику

Для веб-приложения задайте отдельные результаты перечисления, отправки и приёмки файлов. В запрос на доработку включите минимальный состав учебной папки и наблюдаемые счётчики, а не архив с реальными конфиденциальными документами.

Если загруженные файлы затем передаются дальше через API-интеграцию, добавьте следующий подтверждаемый этап. Успех клиентской загрузки не равен успешному разбору или приёму во внешней системе: для каждого перехода нужно своё основание.

Вопросы и ответы

Почему readEntries возвращает только 100 записей?

MDN описывает такую порционную выдачу для Chromium. Для получения всех записей нужно продолжать чтение тем же reader до окончания, а не считать первую порцию всем содержимым.

Нужно ли создавать новый FileSystemDirectoryReader для каждой порции?

Для продолжения обхода одного каталога используют тот же reader. Новый reader нужен для самостоятельного обхода другого каталога, например найденной вложенной папки.

Как проверить полноту загрузки папки через JavaScript?

Отдельно подтвердите завершение перечисления всех каталогов и результат каждой передачи. Сумма принятых, ошибок, отмен и других объяснённых состояний должна соответствовать известному перечню, а не только последнему запросу.

Нужна помощь с проектом?

Обсудим задачу и предложим решение — от сайта до SaaS и защиты.

Связаться