Skip to content

Epoxidex/drift-s3-browser

Repository files navigation

Drift

Веб-интерфейс для работы с S3 и S3-совместимыми хранилищами.

Drift запускается локально, подключается к указанному бакету через Node.js-сервер и предоставляет привычный интерфейс для просмотра, загрузки, скачивания и организации объектов.

Возможности

  • подключение нескольких S3-бакетов с разными endpoint и регионами;
  • навигация по префиксам как по обычным папкам;
  • пагинация через S3 continuation token;
  • поиск и сортировка объектов на текущей странице;
  • загрузка отдельных файлов и целых директорий;
  • drag-and-drop с сохранением структуры вложенных папок;
  • скачивание файлов и директорий в виде ZIP-архива;
  • создание, копирование, перенос, переименование и удаление объектов;
  • контекстное меню и операции copy/cut/paste;
  • предпросмотр изображений, PDF, JSON, исходного кода и текстовых файлов;
  • path-style и virtual-hosted-style S3 endpoint.

Требования

  • Node.js 22 или новее;
  • S3-совместимое хранилище;
  • ключи с разрешениями для необходимых операций.

Запуск

git clone https://github.com/Epoxidex/drift-s3-browser.git
cd drift-s3-browser
npm install
npm run dev

После запуска откройте http://127.0.0.1:5173 и добавьте подключение через стартовый экран.

Vite запускает клиент на порту 5173 и проксирует API-запросы на локальный Fastify-сервер на порту 4173.

Подключение через .env

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

Copy-Item .env.example .env

Затем заполните .env:

S3_ENDPOINT=https://s3.example.com
S3_BUCKET=my-private-bucket
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=replace-me
S3_SECRET_ACCESS_KEY=replace-me
S3_FORCE_PATH_STYLE=true

HOST=127.0.0.1
PORT=4173
Переменная Назначение
S3_ENDPOINT URL S3-совместимого API
S3_BUCKET название бакета
S3_REGION регион подписи запросов
S3_ACCESS_KEY_ID Access Key
S3_SECRET_ACCESS_KEY Secret Access Key
S3_FORCE_PATH_STYLE true для path-style адресации
HOST адрес локального сервера, по умолчанию 127.0.0.1
PORT порт локального сервера, по умолчанию 4173

Файл .env исключён из Git. В .env.example должны оставаться только фиктивные значения.

Необходимые разрешения S3

Набор разрешений зависит от используемых функций:

Операция Разрешения
просмотр содержимого бакета s3:ListBucket
предпросмотр и скачивание s3:GetObject
загрузка и копирование s3:PutObject
удаление и перенос s3:DeleteObject

Для копирования и переноса одновременно нужны разрешения на чтение исходного объекта и запись нового.

Безопасность

  • Secret Access Key не возвращается из API в браузер.
  • Подключения, добавленные через интерфейс, хранятся только в памяти Node.js-процесса.
  • После перезапуска сервера подключения из памяти исчезают.
  • В sessionStorage находится только случайный идентификатор подключения.
  • Сервер по умолчанию слушает только 127.0.0.1.
  • HTML, SVG и неизвестные MIME-типы скачиваются как вложения и не исполняются внутри приложения.
  • Текстовый предпросмотр ограничен первыми 512 КБ.

Приложение рассчитано на локальную работу одного пользователя. Для размещения в сети потребуются HTTPS, пользовательская авторизация, CSRF-защита и внешнее хранилище секретов.

Команды

Команда Назначение
npm run dev запуск клиента и API в режиме разработки
npm run build production-сборка
npm start запуск собранного приложения на порту 4173
npm run typecheck проверка TypeScript
npm test запуск unit-тестов
npm run check typecheck, тесты и production-сборка
npm run check:s3 read-only проверка подключения из .env

Production-сборка

npm run build
npm start

Собранное приложение будет доступно на http://127.0.0.1:4173.

Особенности S3

В S3 нет настоящих директорий: Drift отображает префиксы ключей как папки.

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

ZIP-архивы создаются потоково. Сервер не загружает всю директорию или готовый архив в оперативную память.

Структура проекта

src/            React-интерфейс
server/         Fastify API и S3-операции
scripts/        служебные проверки

Основной стек: React, TypeScript, Vite, Fastify, AWS SDK v3, PDF.js и Vitest.

About

Веб-интерфейс для работы с S3 и S3-совместимыми хранилищами

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages