Файловый менеджер, встраиваемый куда угодно
PHP ≥ 8.1 + Flysystem 3. UI Alpine.js. Локальное, S3, Cloudflare R2. Встраивание за несколько строк JavaScript.
Посмотрите в действии
Всё, что нужно современному файловому менеджеру
Создан для разработчиков, которым нужна гибкость.
Мульти-хранилище
Локальное, AWS S3, Cloudflare R2 через Flysystem v3 — меняйте в конфиге без правки кода.
Встраивайте куда угодно
iframe + postMessage SDK. Автономный UI на Alpine.js (без сборки). С любым фреймворком.
JWT авторизация + скоупинг
Префикс пути, права, белый список дисков, режим только владелец.
AI авто-теги
Claude / OpenAI vision — автоматический alt-текст, заголовок, теги.
Обрезка изображений
Инструмент обрезки с предустановками пропорций.
Оптимизация изображений
Автоматические WebP-варианты — миниатюра, средний, большой.
Предподписанные загрузки
Браузер загружает напрямую в S3/R2 — нулевая нагрузка на ваш сервер.
Загрузка частями
S3 multipart для файлов > 10МБ.
Полнотекстовый поиск
SQLite FTS5 по именам, заголовкам, тегам.
Массовые операции
Множественный выбор: перемещение, копирование, удаление, скачивание.
Кросс-диск перенос
Копирование/перемещение между Локальным ↔ S3 ↔ R2.
Корзина
Восстановимое удаление с автоочисткой.
SEO метаданные
Заголовок, alt, подпись, теги — метаданные S3 (облако) или sidecar JSON (локально). Полнотекстовый поиск.
Тёмный режим
Светлая / тёмная / авто в UI и SDK.
16 языков
По умолчанию английский. Локаль через SDK, URL (?locale=) или FLUXFILES_LOCALE. RTL для арабского.
Журнал аудита
Все действия записи логируются.
Ограничение скорости
Token bucket для каждого пользователя.
Квота хранилища
Лимиты для каждого пользователя через JWT claims.
BYOB бакеты
Свой S3/R2 пользователя — учётные данные в JWT (AES-256-GCM).
Обнаружение дубликатов
Совпадение SHA-256 пропускает лишние загрузки кроме принудительной перезаписи.
Обновление токена SDK
onTokenRefresh при 401 — объединённое обновление, повтор, updateToken().
Запуск за 2 минуты
composer require fluxfiles/fluxfiles
cp .env.example .env
# .env
FLUXFILES_SECRET=your-random-32-char-secret
FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com
require_once 'vendor/autoload.php';
$token = fluxfiles_token(
userId: 'user-123',
perms: ['read', 'write', 'delete'],
disks: ['local', 's3', 'r2'],
prefix: 'user-123/',
maxUploadMb: 10,
allowedExt: null,
ttl: 3600
); composer require fluxfiles/laravel
php artisan vendor:publish --tag=fluxfiles-config
# .env — point the adapter at your FluxFiles server
FLUXFILES_ENDPOINT=https://fm.yourdomain.com
FLUXFILES_SECRET=your-secret-min-32-chars
# Optional: match CORS on the FluxFiles host
# FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com
# Config: config/fluxfiles.php <!-- Demo: unpkg. In production, serve fluxfiles.js from your FluxFiles host -->
<script src="https://unpkg.com/fluxfiles@1.22.0/fluxfiles.js"></script>
<script>
FluxFiles.open({
endpoint: 'https://your-api.com',
token: 'eyJhbGci...',
disk: 'local',
mode: 'picker',
container: '#file-picker',
onSelect: function(file) {
console.log('Selected:', file.url);
},
async onTokenRefresh() {
const r = await fetch('/api/auth/refresh-fluxfiles-token');
const { token } = await r.json();
return token;
}
});
</script> npm install @fluxfiles/react
import { FluxFilesModal } from '@fluxfiles/react';
<FluxFilesModal
open={open}
endpoint="https://your-api.com"
token={token}
onSelect={(file) => console.log(file)}
onClose={() => setOpen(false)}
/> npm install @fluxfiles/vue
<script setup>
import { FluxFilesModal } from '@fluxfiles/vue';
</script>
<FluxFilesModal
v-model:open="open"
endpoint="https://your-api.com"
:token="token"
@select="onSelect"
@close="open = false"
/> git clone https://github.com/thai-pc/fluxfiles.git
cd fluxfiles
composer install -d packages/core
cp .env.example .env
cd packages/core
php -S localhost:8080 router.php
# UI: http://localhost:8080/public/index.html
# API: http://localhost:8080/api/fm/list?disk=local&path= Работает с
Создан для того, о чём другие забыли
| Функция | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Локальное | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| Встраивание в любой фреймворк | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT авторизация + скоупинг | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO метаданные | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI авто-теги | ✓ | ✗ | ✗ | ✗ | ✗ |
| Обрезка изображений | ✓ | ✓ | ✗ | ✗ | ✗ |
| Загрузка частями | ✓ | ✗ | ✗ | ✗ | ✗ |
| Полнотекстовый поиск | ✓ | ✗ | ✗ | ✗ | ✗ |
| Тёмный режим | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 языков | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| Активно поддерживается | ✓ | ✓ | ⚠ | ✗ | ✗ |
| Современный UI | ✓ | ✗ | ⚠ | ✗ | ✗ |