Files SDK
Files SDK — единый storage SDK с единым API для объектного и blob-хранилищ (S3, R2, GCS, Azure и др.). Адаптеры для провайдеров.
Что такое Files SDK?
Files SDK — единый storage SDK, предоставляющий единый и согласованный API для работы с объектными и blob-хранилищами. Цель — позволить использовать одни и те же высокоуровневые операции, такие как загрузка, скачивание, получение списка, удаление и связанные вспомогательные методы, независимо от провайдера.
SDK маршрутизирует запросы через адаптер конкретного провайдера. Это сохраняет стабильность общих частей рабочих процессов хранения, а различия провайдеров (например, поведение URL или отдельные пограничные случаи) обрабатываются внутри адаптера, без изменения точек вызова.
Ключевые возможности
- Единый класс Files для всех провайдеров: Используйте один API для типовых операций хранения (загрузка, скачивание, получение списка, удаление, head, exists, копирование и работа с URL), вместо написания кода под каждого провайдера.
- Выбор провайдера через адаптер при создании экземпляра: Адаптер фиксируется при создании
new Files({ adapter: ... }), что позволяет избежать паттернов «выбор провайдера при каждом вызове». - Поддержка веб-стандартов для входных данных: Принимает
File,Blob,ReadableStream,ArrayBufferиstringв качестве входных данных для загрузки. - Работает везде, где доступен
fetch: Предназначен для сред Node, Bun, Workers и Vercel, обеспечивая единообразное поведение. - Доступ к нативному клиенту через
files.raw: При необходимости использовать функции провайдера можно обратиться к нативному клиенту через свойство (files.raw), типизированное под адаптер. - Нормализованная обработка ошибок: Ошибки возвращаются как единый тип
FilesErrorс нормализованным кодом для всех провайдеров, а оригинальная ошибка провайдера прикрепляется как cause.
Как использовать Files SDK
- Установите SDK (и только те адаптеры, которые планируете использовать как peer-зависимости):
npm install files-sdk
- Импортируйте
Filesи адаптер провайдера, затем создайте экземплярFilesс настроенным адаптером для вашего бакета и региона (например, S3). - Вызывайте общие методы на экземпляре, например:
files.upload(key, input)files.download(key)files.head(key)files.list({ prefix })files.delete(key)
- Используйте
files.rawесли нужно получить доступ к функциям провайдера, не входящим в общий API.
Минимальный пример с страницы:
import { Files } from "files-sdk";
import { s3 } from "files-sdk/s3";
const files = new Files({
adapter: s3({ bucket: "uploads", region: "us-east-1" }),
});
await files.upload("hello.txt", "world");
const file = await files.download("hello.txt");
const meta = await files.head("hello.txt");
const items = await files.list();
await files.delete("hello.txt");
Сценарии использования
- Создание слоя хранения с возможностью смены провайдера: Начинайте с одного бэкенда (например, S3-compatible storage) и позже переходите к другому адаптеру без переписывания логики загрузки, скачивания, получения списка и удаления в приложении.
- Единообразная обработка файловых входных данных в коде бэкенда: Используйте поддерживаемые типы входных данных (
File,Blob,ReadableStream,ArrayBuffer,string) при получении от сервера объектов, соответствующих веб-стандартам. - Организация загрузок по префиксам и управление жизненным циклом объектов на уровне приложения: Используйте
list({ prefix })иdelete(key)для реализации коллекций или «папок» над объектным хранилищем, управляемых приложением. - Интеграция с средами, основاً на доступности
fetch: Разворачивайте код в Node, Bun, Workers или Vercel, используя одни и те же API-вызовы и входные данные. - Использование нормализованных ошибок для последовательной обработки и повторных попыток: Перехватывайте
FilesErrorс нормализованным кодом,并<|eos|>
Альтернативы
- Специализированные SDK провайдеров (например, нативные клиенты S3/GCS/Azure): Они обеспечивают полное покрытие провайдеров, но обычно требуют разных кодовых путей для каждого бэкенда и отдельной обработки общих задач.
- Уровни абстракции объектного хранилища без веб-стандартных входных данных: Некоторые абстракции предоставляют унифицированный интерфейс, но могут не поддерживать тот же набор веб-нативных типов входных данных или
fetch-ориентированные предположения среды выполнения. - Серверные библиотеки загрузки файлов с опцией бэкенда хранения: Полезны, когда основная цель — обработка загрузок, но они могут не предоставлять тот же набор стандартизированных операций (head/exists/copy/url helpers) и доступа к нативному клиенту через escape hatch.
- Прямая HTTP-интеграция с конечными точками object/Blob: Если вам нужен максимальный контроль, прямой вызов HTTP API провайдера позволяет избежать абстракции, но переносит listing, signing, нормализацию ошибок и различия между провайдерами в ваше приложение.
Альтернативы
open-codex-computer-use
open-codex-computer-use — open-source служба «Computer Use» в виде MCP-сервера: AI-агенты управляют GUI на macOS, Linux и Windows.
Lasso
Lasso — AI-first PIM для команд e-commerce: обогащает атрибуты и описания, обрабатывает данные поставщиков и мониторит конкурентов через приложение или API.
Codex Plugins
Используйте Codex Plugins, чтобы объединять skills, интеграции приложений и MCP-серверы в повторно используемые сценарии для доступа к Gmail, Google Drive и Slack.
Struere
Struere — AI-native операционная система вместо таблиц: структурированные приложения с дашбордами, алертами и автоматизациями для задач и процессов.
Ably Chat
Ably Chat — chat API и SDK для кастомных realtime-приложений: реакции, presence и правка/удаление сообщений для чатов в масштабе.
garden-md
garden-md превращает расшифровки встреч в структурированную связанную wiki-компанию: HTML-вью в браузере и markdown, с синхронизацией из поддерживаемых источников.