Trình quản lý file nhúng được mọi nơi
PHP ≥ 8.1 + Flysystem 3. Giao diện Alpine.js. Local, S3, Cloudflare R2. Nhúng với vài dòng JavaScript.
Xem thực tế
Mọi thứ một trình quản lý file hiện đại cần
Xây dựng cho lập trình viên cần sự linh hoạt.
Đa lưu trữ
Local, AWS S3, Cloudflare R2 qua Flysystem v3 — đổi bằng config, không sửa code.
Nhúng mọi nơi
iframe + SDK postMessage. UI độc lập dùng Alpine.js (không build). Dùng được với mọi framework.
JWT auth + phân quyền
Prefix đường dẫn theo user, quyền, whitelist disk, chế độ owner-only.
AI auto-tag
Claude / OpenAI vision — tự động alt text, tiêu đề, tags.
Cắt ảnh
Công cụ cắt ảnh với tỷ lệ khung hình sẵn.
Tối ưu ảnh
Tự tạo biến thể WebP — thumb, medium, large.
Upload presigned
Trình duyệt upload trực tiếp lên S3/R2 — không tốn bandwidth server.
Upload phân mảnh
S3 multipart cho file > 10MB.
Tìm kiếm toàn văn
SQLite FTS5 tìm theo tên, tiêu đề, tags.
Thao tác hàng loạt
Chọn nhiều file để di chuyển, sao chép, xóa, tải.
Chuyển giữa các disk
Sao chép/di chuyển giữa Local ↔ S3 ↔ R2.
Thùng rác
Xóa mềm có thể khôi phục, tự dọn dẹp.
SEO metadata
Title, alt, caption, tags — metadata object S3 (cloud) hoặc sidecar JSON (local). Tìm kiếm full-text.
Chế độ tối
Sáng / tối / tự động trong UI và SDK.
16 ngôn ngữ
Mặc định tiếng Anh. Đặt locale qua SDK, URL (?locale=), hoặc FLUXFILES_LOCALE. RTL cho tiếng Ả Rập.
Nhật ký kiểm toán
Ghi log tất cả hành động ghi.
Giới hạn tốc độ
Token bucket cho mỗi người dùng.
Hạn mức lưu trữ
Giới hạn dung lượng theo JWT claims.
BYOB bucket
Người dùng gắn S3/R2 riêng — credential mã hóa trong JWT (AES-256-GCM).
Phát hiện trùng file
Khớp SHA-256 bỏ qua upload trùng trừ khi bạn force ghi đè.
Làm mới token SDK
onTokenRefresh khi 401 — gộp refresh, thử lại, và updateToken() để đổi token chủ động.
Chạy trong 2 phút
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= Tương thích với
Xây dựng cho những gì người khác bỏ quên
| Tính năng | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Local | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| Nhúng mọi framework | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT auth + phân quyền | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO metadata | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI auto-tag | ✓ | ✗ | ✗ | ✗ | ✗ |
| Cắt ảnh | ✓ | ✓ | ✗ | ✗ | ✗ |
| Upload phân mảnh | ✓ | ✗ | ✗ | ✗ | ✗ |
| Tìm kiếm toàn văn | ✓ | ✗ | ✗ | ✗ | ✗ |
| Chế độ tối | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 ngôn ngữ | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| Đang maintain | ✓ | ✓ | ⚠ | ✗ | ✗ |
| UI hiện đại | ✓ | ✗ | ⚠ | ✗ | ✗ |