Я пытаюсь получить доступ к локальным файлам веб-приложения. Веб-IDE, такая как vscode, может напрямую изменять или переименовывать локальные файлы. Хотя vscode, похоже, не использует такой тег, как <input type = "file" />
Я надеюсь загрузить локальный каталог и управлять файлами, такими как удаление/переименование, через мое веб-приложение. Решение веб-IDE может предоставить некоторую ссылку.
Как vscode получает доступ к локальному файлу?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


vscode.dev использует API доступа к файловой системе, который позволяет веб-приложениям напрямую читать и изменять файловую систему.
Вместо использования <input type = "file" /> он вызывает window.showOpenFilePicker() , чтобы получить FileSystemFileHandle , который затем, в свою очередь, может быть прочитан и преобразован в FileSystemWritableFileStream, в который браузер может записывать и сохранять файлы. . Точно так же API может обрабатывать каталоги и просматривать файловую иерархию.
Конечно, это упрощение, так как я не мог подробно рассмотреть API в этом ответе. В статье MDN есть много примеров и подробная документация, которую вам захочется прочитать. Для тестирования следует отметить, что API доступен только на сайтах, обслуживаемых через HTTPS, поэтому вам нужно будет настроить SSL для вашего localhost. Также API доступен не во всех браузерах, поэтому обязательно сверяйтесь с таблицей совместимости.
У меня возникла ошибка «Пользователь прервал запрос», когда я пытаюсь переименовать файл с помощью функции file.move(), упомянутой в этом ответе. Флаг chrome://flags/#enable-experimental-web-platform-features может помочь, но не рекомендуется включать флаг вручную. Есть ли другой способ переименовать файл без изменения настроек вручную?
@cliffyang Я не совсем уверен, в чем проблема, потому что не знаю, что у вас за код. Если у вас все еще есть проблема, я предлагаю опубликовать новый вопрос на Stack Overflow.
Согласен с ответом. Следует также иметь в виду, что только около 40% браузеров в настоящее время поддерживают этот API.