Js, как получить путь к файлу

Обновлено: 21.11.2024

__dirname — это переменная среды, которая сообщает вам абсолютный путь к каталогу, содержащему исполняемый в данный момент файл.

В этой статье вы узнаете, как реализовать __dirname в вашем проекте Node.js.

Предпосылки

Для выполнения этого руководства вам потребуется:

  • Общие знания Node.js. Чтобы узнать больше о Node.js, ознакомьтесь с нашей серией статей «Как программировать в Node.js».

Это руководство было проверено с помощью Node.js версии 17.2.0 и npm версии 8.2.0.

Шаг 1 — Настройка проекта

В этом руководстве будет использоваться следующая примерная структура каталогов, чтобы изучить, как работает __dirname:

Вы можете начать с создания каталога dirname-example в своем терминале:

Перейдите в каталог проекта:

Инициализируйте его как проект Node.js:

Теперь вы создадите каталоги и файлы для экспериментов.

Шаг 2 — Использование __dirname

Вы можете использовать __dirname, чтобы проверить, в каких каталогах находятся ваши файлы.

Создайте и отредактируйте файл controller.js в подкаталоге api в каталоге src:

Затем запустите скрипт:

Создайте и отредактируйте файл hello.js в каталоге cronjobs:

Затем запустите скрипт:

Обратите внимание, что __dirname имеет разное значение в зависимости от того, какой файл вы используете для консоли. Метод process.cwd() также возвращает значение, но вместо этого каталог проекта. Переменная __dirname всегда возвращает абсолютный путь к месту, где находятся ваши файлы.

Шаг 3 — Работа с каталогами

В этом разделе вы узнаете, как использовать __dirname для создания новых каталогов, указания на них, а также добавления новых файлов.

Создание новых каталогов

Чтобы создать новый каталог в файле index.js, вставьте __dirname в качестве первого аргумента для path.join() и имя нового каталога в качестве второго:

Теперь вы создали новый каталог images после вызова метода mdirSync(), который содержит __dirname в качестве абсолютного пути.

Указание на каталоги

Еще одна уникальная функция – возможность указывать на каталоги. В вашем файле index.js объявите переменную и передайте значение __dirname в качестве первого аргумента в path.join() , а ваш каталог, содержащий статические файлы, в качестве второго:

Здесь вы указываете Node.js использовать __dirname для указания на общедоступный каталог, содержащий статические файлы.

Добавление файлов в каталог

Вы также можете добавлять файлы в существующий каталог. В файле index.js объявите переменную и включите __dirname в качестве первого аргумента и файл, который вы хотите добавить, в качестве второго:

Использование метода openSync() добавит файл, если он не существует в вашем каталоге.

Заключение

Node.js позволяет создавать каталоги и указывать на них. И добавляйте файлы в существующие каталоги с помощью модульной переменной среды.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Метод интерфейса FileSystemDirectoryEntry getFile() возвращает объект FileSystemFileEntry, соответствующий файлу, содержащемуся где-то в поддереве каталога, корнем которого является каталог, для которого он был вызван.

Синтаксис

Параметры

USVString, указывающий путь относительно каталога, для которого вызывается метод, и описывающий, какую запись файла нужно вернуть.

Объект, который позволяет указать, создавать ли запись, если она отсутствует, и является ли это ошибкой, если файл уже существует. Эти параметры в настоящее время бесполезны в веб-контекстах. Дополнительные сведения см. в разделе параметров параметров.

Метод, вызываемый после создания FileSystemFileEntry. Метод получает единственный параметр: объект FileSystemFileEntry, представляющий рассматриваемый файл.

Метод, вызываемый при возникновении ошибки. Получает в качестве единственного входного параметра объект DOMException, описывающий возникшую ошибку.

Параметры параметров

Объект параметров параметров принимает следующие параметры:

Если это свойство имеет значение true , а запрошенный файл не существует, пользовательский агент должен его создать. Значение по умолчанию — ложь. Родительский каталог уже должен существовать.

Если задано значение true и параметр create также имеет значение true , файл не должен существовать до выполнения вызова. Вместо этого должна быть возможность создать его заново во время вызова. Значение по умолчанию — ложь. Этот параметр игнорируется, если create имеет значение false .

В таблице ниже описаны результаты каждой возможной комбинации этих флагов в зависимости от того, существует ли уже путь к целевому файлу.

< tbody> < td>вызывается errorCallback с соответствующим кодом ошибки (если обратный вызов был предоставлен). < /таблица>

Возвращаемое значение

Исключения

Вызывается, если параметр создания не был указан (или был указан как false ), а файл не существует.

Вызывается, если запрос на доступ к файлу был отклонен по соображениям безопасности.

Вызывается, если указанный путь не является файлом; это, вероятно, каталог, но может быть и неподдерживаемый файловый дескриптор, например канал; это в некоторой степени зависит от пользовательского агента.

Пример

В этом примере представлена ​​функция, задачей которой является поиск в каталоге данных пользовательского приложения файла JSON, содержащего пользовательский словарь для указанного языка, а затем загрузка этого словаря.

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

Работа модуля пути по умолчанию зависит от операционной системы, в которой работает приложение Node.js. В частности, при работе в операционной системе Windows модуль пути предполагает, что используются пути в стиле Windows.

Поэтому использование path.basename() может привести к разным результатам в POSIX и Windows:

Для достижения согласованных результатов при работе с путями к файлам Windows в любой операционной системе используйте path.win32 :

В POSIX и Windows:

Для достижения согласованных результатов при работе с путями к файлам POSIX в любой операционной системе используйте path.posix :

В POSIX и Windows:

В Windows Node.js использует концепцию рабочего каталога для каждого диска. Такое поведение можно наблюдать при использовании пути к диску без обратной косой черты. Например, path.resolve('C:\\') потенциально может возвращать результат, отличный от path.resolve('C:') . Дополнительные сведения см. на этой странице MSDN.

Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.

  • путь
  • ext Необязательное расширение файла.
  • Возвращает:

Метод path.basename() возвращает последнюю часть пути аналогично команде basename Unix. Завершающие разделители каталогов игнорируются, см. path.sep .

Хотя Windows обычно обрабатывает имена файлов, включая расширения файлов, без учета регистра, эта функция этого не делает. Например, C:\\foo.html и C:\\foo.HTML ссылаются на один и тот же файл, но basename обрабатывает расширение как строку с учетом регистра:

Выдается ошибка TypeError, если path не является строкой или если указан ext, который не является строкой.

Предоставляет разделитель пути для конкретной платформы:

Например, в POSIX:

Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.

Метод path.dirname() возвращает имя каталога path , подобно команде Unix dirname. Завершающие разделители каталогов игнорируются, см. path.sep .

Выдается ошибка TypeError, если путь не является строкой.

Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.

Метод path.extname() возвращает расширение пути из последнего вхождения . символ (точка) до конца строки в последней части пути. Если нет . на последнем участке пути или если их нет. символов, отличных от первого символа базового имени пути (см. path.basename() ), возвращается пустая строка.

Выдается ошибка TypeError, если путь не является строкой.

  • pathObject Любой объект JavaScript, имеющий следующие свойства:
    • каталог
    • корень
    • база
    • имя
    • дополнительно

    Метод path.format() возвращает строку пути из объекта. Это противоположно path.parse() .

    При предоставлении свойств pathObject помните, что существуют комбинации, в которых одно свойство имеет приоритет над другим:

    • pathObject.root игнорируется, если указан pathObject.dir
    • pathObject.ext и pathObject.name игнорируются, если pathObject.base существует

    Например, в POSIX:

    Метод path.isAbsolute() определяет, является ли path абсолютным путем.

    Если указанный путь представляет собой строку нулевой длины, будет возвращено значение false.

    Например, в POSIX:

    Выдается ошибка TypeError, если путь не является строкой.

      <ли>. paths Последовательность сегментов пути
    • Возвращает:

    Метод path.join() объединяет все заданные сегменты пути вместе, используя разделитель для конкретной платформы в качестве разделителя, а затем нормализует полученный путь.

    Сегменты пути нулевой длины игнорируются. Если объединенная строка пути является строкой нулевой длины, тогда '.' будет возвращено, представляя текущий рабочий каталог.

    Выдается ошибка TypeError, если какой-либо из сегментов пути не является строкой.

    Метод path.normalize() нормализует заданный путь, разрешая '..' и '.' сегменты.

    При обнаружении нескольких последовательных символов разделения сегментов пути (например, / в POSIX и \ или / в Windows) они заменяются одним экземпляром разделителя сегментов пути для конкретной платформы ( / в POSIX и \ в Windows). ). Завершающие разделители сохраняются.

    Если путь представляет собой строку нулевой длины, '.' возвращается, представляя текущий рабочий каталог.

    Например, в POSIX:

    Поскольку Windows распознает несколько разделителей пути, оба разделителя будут заменены экземплярами предпочтительного разделителя Windows ( \ ):

    Выдается ошибка TypeError, если путь не является строкой.

    Метод path.parse() возвращает объект, свойства которого представляют важные элементы пути. Завершающие разделители каталогов игнорируются, см. path.sep .

    Возвращенный объект будет иметь следующие свойства:

    Например, в POSIX:

    Выдается ошибка TypeError, если путь не является строкой.

    Отображается как require('path/posix') .

    Добавлено в: v0.11.15

    Свойство path.posix обеспечивает доступ к специфичным для POSIX реализациям методов пути.

    Доступ к API осуществляется через require('path').posix или require('path/posix') .

    В Windows начальные косые черты для путей UNC теперь включаются в возвращаемое значение.

    Метод path.relative() возвращает относительный путь от к до на основе текущего рабочего каталога. Если от и до каждого разрешается один и тот же путь (после вызова path.resolve() для каждого), возвращается строка нулевой длины.

    Если строка нулевой длины передается как from или to , вместо строк нулевой длины будет использоваться текущий рабочий каталог.

    Например, в POSIX:

    Выдается ошибка TypeError, если from или to не является строкой.

      <ли>. paths Последовательность путей или сегментов пути
    • Возвращает:

    Метод path.resolve() преобразует последовательность путей или сегментов пути в абсолютный путь.

    Заданная последовательность путей обрабатывается справа налево, с добавлением каждого последующего пути до тех пор, пока не будет построен абсолютный путь. Например, учитывая последовательность сегментов пути: /foo , /bar , baz , вызов path.resolve('/foo', '/bar', 'baz') вернет /bar/baz, потому что 'baz' не является абсолютный путь, но '/bar' + '/' + 'baz'.

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

    Результирующий путь нормализуется, а завершающие косые черты удаляются, если только путь не разрешается в корневой каталог.

    Сегменты пути нулевой длины игнорируются.

    Если сегменты пути не переданы, path.resolve() вернет абсолютный путь к текущему рабочему каталогу.

    Выдается ошибка TypeError, если какой-либо из аргументов не является строкой.

    Предоставляет разделитель сегментов пути для конкретной платформы:

    Например, в POSIX:

    В Windows как прямая косая черта (/), так и обратная косая черта (\) принимаются в качестве разделителей сегментов пути; однако методы пути добавляют только обратную косую черту ( \ ).

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

    Этот метод имеет смысл только в системах Windows. В системах POSIX этот метод не работает и всегда возвращает путь без изменений.

    Отображается как require('path/win32') .

    Добавлено в: v0.11.15

    Свойство path.win32 обеспечивает доступ к специфичным для Windows реализациям методов пути.

    Доступ к API осуществляется через require('path').win32 или require('path/win32') .

    Утилита для получения файлового объекта JS из пути локальной файловой системы при использовании Node вместе с клиентским интерфейсом.

    Это решает проблему отсутствия взаимодействия между файловой системой Node fs (к которой у браузера нет доступа) и типом объекта File браузера, который Node не может создать.

    Установить

    Это модуль Node.js, доступный через реестр npm. Установка выполняется с помощью команды npm install:

    Как использовать

    Утилита содержит две функции:

    1. LocalFileData() : функция конструктора объекта, которая принимает абсолютный путь в качестве аргумента

    Вызовите это в среде Node, передав абсолютный путь в качестве одного аргумента, чтобы создать объект LocalFileData, содержащий все данные, необходимые для создания файлового объекта во внешнем клиенте:

    • name : имя исходного файла
    • arrayBuffer : arrayBuffer, созданный с использованием буфера исходного файла.
    • type : тип MIME, основанный на расширении исходного файла. Возвращает неопределенное значение, если оно не может быть выведено.
    1. constructFileFromLocalFileData(): функция для преобразования предоставленного объекта LocalFileData в объект JS File. Это должно выполняться во внешнем коде, который имеет доступ к конструктору window.File.

    После создания этот файл ведет себя так же, как объект JS File, созданный, например, с помощью средства выбора файлов HTML.

    Случаи использования

    get-file-object-from-local-path был создан для указания файлов для обработки и последующей отправки из основного потока в поток рендерера в Electron; однако экземпляр LocalFileData — это простой объект, который можно сериализовать/строково и передавать любым требуемым способом.

    1. Клиент отправляет путь к файлу в среду Node.js
    2. Бэкэнд извлекает файл, обрабатывает его и создает объект LocalFileData результата
    3. Среда Node.js отправляет объект LocalFileData клиенту
    4. Клиент преобразует объект LocalFileData в объект File, например. загрузить на сервер

    Ограничения

    Читайте также:

параметр создания эксклюзивный параметр Условие пути Результат
false Игнорируется Путь существует и является файлом Вызывается SuccessCallback с FileSystemFileEntry .
false Игнорируется Путь существует, но является каталогом
true false Path существует Существующий файл удаляется и заменяется новым, затем вызывается successCallback с FileSystemFileEntry .
true false Путь не существует Файл создается, затем FileSystemFileEntry передается в successCallback .
true true Путь существует Вызов errorCallback с соответствующей ошибкой, такой как FileError.PATH_EXISTS_ERR .
правда true Путь не существует Файл создается, затем FileSystemFileEntry передается в successCallback .