ตัวจัดการไฟล์ที่ฝังได้ทุกที่
PHP ≥ 8.1 + Flysystem 3 อินเทอร์เฟซ Alpine.js Local, S3, Cloudflare R2, SFTP ฝังด้วย JavaScript ไม่กี่บรรทัด
ดูการทำงานจริง
ไฟล์ของลูกค้าคุณอยู่ในบักเก็ตของลูกค้าคุณเอง
FluxFiles คือไฟล์แมเนเจอร์แบบฝังได้ที่ผู้เช่าแต่ละรายเชื่อมต่อบักเก็ต S3/R2 ของตนเอง — และคุณไม่เก็บทั้งข้อมูลและข้อมูลรับรองของพวกเขา
-
อธิปไตยของข้อมูล
ไฟล์อยู่ในบัญชีคลาวด์และภูมิภาคของลูกค้าเอง — ออกแบบมาเพื่อ GDPR การปฏิบัติตามข้อกำหนด และการจัดซื้อระดับองค์กร
-
ไม่มีข้อมูลและกุญแจค้างไว้
ข้อมูลรับรองบักเก็ตถูกเข้ารหัส AES-256-GCM ภายใน JWT และถอดรหัสเฉพาะตอนรันไทม์เท่านั้น — ไม่เคยเขียนลงฐานข้อมูลหรือบันทึก
-
ต้นทุนสตอเรจที่สเกลลงเหลือศูนย์
สตอเรจและ egress เรียกเก็บกับลูกค้าแต่ละราย ไม่ใช่กับคุณ ไม่มีบิลสตอเรจที่โตตามจำนวนผู้ใช้
-
ไร้สถานะและฝังได้
ไม่มีฐานข้อมูลส่วนกลาง วาง picker ลงในแอปใดก็ได้ผ่าน iframe หรือ SDK แบ็กเอนด์ของคุณออกโทเค็นที่จำกัดขอบเขตและอายุสั้น
ทำงานอย่างไร: แอปของคุณเข้ารหัสข้อมูลรับรองบักเก็ตของผู้เช่าลงใน JWT อายุสั้น (HKDF-SHA256 + AES-256-GCM) FluxFiles ถอดรหัสเฉพาะเพื่อทำงานที่ร้องขอเท่านั้น
หนึ่งโทเค็นต่อหนึ่งผู้เช่า — แต่ละรายมีกฎของตัวเอง
FluxFiles ไร้สถานะ: JWT ที่แบ็กเอนด์ของคุณออกคือคอนฟิกของผู้เช่ารายนั้น เส้นทางจัดเก็บ ขนาดไฟล์สูงสุด โควตา จำนวนไฟล์ ชนิดที่อนุญาต สิทธิ์ — บังคับใช้ที่ฝั่งเซิร์ฟเวอร์ทั้งหมด ไม่มีไฟล์คอนฟิกต่อผู้เช่า ไม่ต้องรีสตาร์ท
// Your backend, per request — the token IS the tenant's config.
import { createToken } from '@fluxfiles/node';
const claims = tenant.plan === 'pro'
// 100 MB/file · any type · 50 GB · unlimited files · own bucket
? { disks: ['s3'], maxUploadMb: 100, allowedExt: null,
maxStorageMb: 51200, maxFiles: 0 }
// 5 MB/file · images only · 500 MB · 200 files
: { disks: ['local'], maxUploadMb: 5, allowedExt: ['jpg','png','webp'],
maxStorageMb: 500, maxFiles: 200 };
const token = createToken({
secret: process.env.FLUXFILES_SECRET,
userId: tenant.id,
prefix: `tenant_${tenant.id}/`, // isolates each tenant's files
perms: ['read', 'write', 'delete'],
...claims,
}); จับคู่กับ BYOB เพื่อให้ผู้เช่าแต่ละรายอยู่บนบักเก็ตของตนเอง
สร้างมาเพื่อทีมที่ส่งมอบฟีเจอร์จัดการไฟล์
ถ้าผลิตภัณฑ์ของคุณต้องการการอัปโหลด FluxFiles เสียบเข้าได้ทันที — โดยไม่ทำให้คุณเป็นผู้ดูแลข้อมูลของลูกค้า
SaaS และแอปแบบหลายผู้เช่า
มอบไฟล์แมเนเจอร์บนบักเก็ตของลูกค้าแต่ละราย พร้อมการจำกัดโทเค็นต่อผู้เช่าและอธิปไตยของข้อมูลในตัว
เอเจนซีและฟรีแลนซ์
ส่งมอบไลบรารีสื่อที่เรียบร้อยให้ลูกค้าแต่ละราย โดยไม่ต้องตั้งโครงสร้างพื้นฐานสตอเรจต่อโปรเจกต์
การเชื่อมต่อ CMS และตัวแก้ไข
ใส่ตัวเลือกสื่อลงใน CKEditor, TinyMCE, Summernote หรือตัวแก้ไขของคุณผ่าน iframe SDK
เครื่องมือภายในและแดชบอร์ด
เพิ่มการอัปโหลด พรีวิว และการทำงานกับไฟล์ที่มีการตรวจสอบลงในแผงผู้ดูแลได้ในบ่ายวันเดียว
ทุกสิ่งที่ตัวจัดการไฟล์สมัยใหม่ต้องการ
สร้างขึ้นสำหรับนักพัฒนาที่ต้องการความยืดหยุ่น
หลายที่เก็บข้อมูล
Local, AWS S3, Cloudflare R2, SFTP ผ่าน Flysystem v3 — สลับด้วย config ไม่ต้องแก้โค้ด
ฝังได้ทุกที่
iframe + postMessage SDK UI แยกใช้ Alpine.js (ไม่ต้อง build) ใช้กับทุกเฟรมเวิร์ก
JWT auth + scoping
พาธพรีฟิกซ์ต่อผู้ใช้ สิทธิ์ ไวท์ลิสต์ดิสก์ โหมด owner-only
AI auto-tag
Claude / OpenAI vision — alt text, ชื่อ, แท็กอัตโนมัติ
ครอปรูปภาพ
เครื่องมือครอปพร้อมอัตราส่วนภาพสำเร็จรูป
ปรับแต่งรูปภาพ
สร้าง WebP อัตโนมัติ — thumb, medium, large
อัปโหลดแบบ presigned
เบราว์เซอร์อัปโหลดตรงไปยัง S3/R2 — ไม่ใช้แบนด์วิดท์เซิร์ฟเวอร์เลย
อัปโหลดแบบแบ่งส่วน
S3 multipart สำหรับไฟล์ > 10MB
ค้นหาข้อความเต็ม
ค้นหาแบบมีดัชนีตามชื่อ, ชื่อเรื่อง, แท็ก — อิงไฟล์ ไม่ต้องใช้ฐานข้อมูล
ดำเนินการจำนวนมาก
เลือกหลายไฟล์เพื่อย้าย คัดลอก ลบ ดาวน์โหลด
ถ่ายโอนข้ามดิสก์
คัดลอก/ย้ายระหว่าง Local ↔ S3 ↔ R2
ถังขยะ
ลบแบบกู้คืนได้ ล้างอัตโนมัติ
SEO metadata
หัวข้อ alt คำบรรยาย แท็ก — metadata อ็อบเจ็กต์ S3 (คลาวด์) หรือ sidecar JSON (โลคัล) ค้นหาข้อความเต็ม
โหมดมืด
สว่าง / มืด / อัตโนมัติ ใน UI และ SDK
16 ภาษา
ค่าเริ่มต้นภาษาอังกฤษ ตั้ง locale ผ่าน SDK URL (?locale=) หรือ FLUXFILES_LOCALE อาหรับ RTL
บันทึกการตรวจสอบ
บันทึกการกระทำเขียนทั้งหมด
จำกัดอัตรา
Token bucket ต่อผู้ใช้สำหรับป้องกัน API
โควต้าพื้นที่
จำกัดต่อผู้ใช้ผ่าน JWT claims
BYOB bucket
ผู้ใช้ผูก S3/R2 เอง — credential เข้ารหัสใน JWT (AES-256-GCM)
ตรวจซ้ำ
SHA-256 ตรงกันข้ามอัปโหลดซ้ำ เว้นแต่บังคับเขียนทับ
รีเฟรชโทเคน SDK
onTokenRefresh เมื่อ 401 — รวมรีเฟรช ลองใหม่ updateToken()
Bucket Doctor
วินิจฉัยดิสก์ S3/R2 ใดก็ได้ — ข้อมูลรับรอง อ่าน/เขียน/ลบ presign CORS multipart — พร้อมวิธีแก้ IAM และ CORS ที่พร้อมวาง เพิ่มบักเก็ต BYOB ได้ในไม่กี่นาที
Node token SDK
สร้างโทเค็น FluxFiles จากแบ็กเอนด์ JS ใดก็ได้ (Express, Next.js, Nuxt) ด้วย @fluxfiles/node — เข้ากันได้ระดับไบต์กับคอร์ PHP ไม่ต้องใช้ PHP เพื่อออกโทเค็น
ดิสก์ SFTP
ไดรเวอร์ที่ 3 ต่อจาก S3/R2 — เปลี่ยน VPS หรือโฮสต์ให้เป็นตัวจัดการไฟล์
แก้โค้ด / config
แก้ไฟล์ข้อความและคอนฟิก (wp-config.php, .env) ในเบราว์เซอร์ สไตล์ cPanel
บีบอัดและแตกไฟล์
ดาวน์โหลดที่เลือกเป็น zip หรือแตกไฟล์ในที่ — ป้องกัน zip-slip และ bomb
ลายน้ำ
ใส่ลายน้ำข้อความหรือโลโก้แบบเรียลไทม์เพื่อปกป้อง — ไม่แตะไฟล์ต้นฉบับ
WebP + AVIF ตามต้องการ
ให้บริการรูปทุกขนาดเป็น AVIF/WebP ที่แคชผ่าน URL เดียว (เจรจาด้วย Accept) พร้อม srcset แบบ responsive
สิทธิ์ SFTP
เปลี่ยนสิทธิ์ไฟล์ Unix (chmod) บนดิสก์ SFTP ด้วยกล่องโต้ตอบสไตล์ cPanel
แดชบอร์ดการใช้งาน
ดูพื้นที่จัดเก็บได้ทันที — โควตาพร้อมแยกตามประเภทและโฟลเดอร์
พรีวิวสื่อ
พรีวิวรูป วิดีโอ เสียง และ PDF ในตัว; สื่อโลคัลส่วนตัวสตรีมอย่างปลอดภัย
พร้อมใช้งานใน 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 npm install @fluxfiles/node
// Express / Next.js route — mint a token from your JS backend (no PHP)
import { createToken } from '@fluxfiles/node';
app.get('/fluxfiles-token', (req, res) => {
const token = createToken({
secret: process.env.FLUXFILES_SECRET, // >= 32 bytes
userId: req.user.id,
perms: ['read', 'write', 'delete'],
prefix: `users/${req.user.id}`,
ttl: 3600,
});
res.json({ token });
}); <!-- Demo: unpkg. In production, serve fluxfiles.js from your FluxFiles host -->
<script src="https://unpkg.com/fluxfiles@latest/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
docker build -f fluxfiles/docker/Dockerfile.prod -t fluxfiles fluxfiles
docker run -p 8080:80 \\
-e FLUXFILES_SECRET=your-random-32-char-secret \\
fluxfiles
# UI: http://localhost:8080/public/index.html 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 ลงในเฟรมเวิร์กและเอดิเตอร์ที่คุณใช้อยู่แล้วได้ทันที
การฝัง
ฝังได้ในไม่กี่บรรทัด
โหลด fluxfiles.js ส่ง JWT ที่ออกจากเซิร์ฟเวอร์ แล้ววางตัวจัดการไฟล์เต็มรูปแบบ — หรือโมดัลเลือกไฟล์ — ลงในหน้าใดก็ได้
<script src="https://fm.example.com/fluxfiles.js"></script>
FluxFiles.open({
endpoint: 'https://fm.example.com',
token: 'eyJhbGci...', // JWT from your backend
disk: 'local',
mode: 'picker', // select & close
theme: 'auto',
onSelect(file) {
// { url, key, name, size, disk, meta, variants }
document.querySelector("#img").src = file.url;
},
}); <div id="fm" style="height:600px"></div>
FluxFiles.open({
endpoint: 'https://fm.example.com',
token: 'eyJhbGci...',
mode: 'browser', // full manager, stays open
container: '#fm', // omit for a modal overlay
disks: ['local', 's3', 'r2'],
});
FluxFiles.on('FM_EVENT', (e) => console.log(e.event));
FluxFiles.navigate('/photos/2024'); import { FluxFilesModal } from '@fluxfiles/react';
function Picker({ open, setOpen, token }) {
return (
<FluxFilesModal
open={open}
endpoint="https://fm.example.com"
token={token}
onSelect={(file) => console.log(file.url)}
onClose={() => setOpen(false)}
/>
);
} โทเค็นถูกออกจากฝั่งเซิร์ฟเวอร์ — อย่าส่งซีเคร็ตของคุณไปยังเบราว์เซอร์เด็ดขาด
สร้างขึ้นสำหรับสิ่งที่คนอื่นลืม
| คุณสมบัติ | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Local + SFTP | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| ฝังในทุกเฟรมเวิร์ก | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT auth + scoping | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO metadata | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI auto-tag | ✓ | ✗ | ✗ | ✗ | ✗ |
| ครอปรูปภาพ | ✓ | ✓ | ✗ | ✗ | ✗ |
| อัปโหลดแบบแบ่งส่วน | ✓ | ✗ | ✗ | ✗ | ✗ |
| ค้นหาข้อความเต็ม | ✓ | ✗ | ✗ | ✗ | ✗ |
| โหมดมืด | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 ภาษา | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| ดูแลอย่างต่อเนื่อง | ✓ | ✓ | ⚠ | ✗ | ✗ |
| UI สมัยใหม่ | ✓ | ✗ | ⚠ | ✗ | ✗ |
โฮสต์เองและฝังได้ — ไม่ใช่ SaaS อัปโหลดอีกตัว
ไฟล์ API แบบโฮสต์นั้นดี แต่มันเก็บข้อมูลของคุณและคิดเงินตามการใช้งาน FluxFiles รันในสแตกของคุณ โดยผู้เช่าแต่ละรายอยู่บนบักเก็ตของตน
| ความสามารถ | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| โฮสต์เอง (รันในโครงสร้างพื้นฐานของคุณ) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — บักเก็ตของลูกค้าแต่ละราย | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| UI ไฟล์แมเนเจอร์แบบฝังได้ | ✓ | ✓ | ✓ | ⚠ | ✗ |
| โอเพนซอร์ส (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| ไม่มีค่า SaaS ต่อสตอเรจ / ต่อการอัปโหลด | ✓ | ✗ | ✗ | ✗ | ⚠ |
| หลายสตอเรจ (S3 / R2 / โลคัล) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| จำกัดขอบเขตโทเค็นต่อผู้เช่าในตัว | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
การเปรียบเทียบสะท้อนข้อเสนอเริ่มต้นทั่วไป แต่ละผลิตภัณฑ์โดดเด่นในพื้นที่ของตน จุดเฉพาะของ FluxFiles คือการผสานแบบฝังได้ โฮสต์เอง และ bring-your-own-bucket
ผลิตภัณฑ์ที่ขายได้
มากกว่าจัดการไฟล์ — ขายและรับไฟล์
คอร์ฟรีฝังตัวจัดการไฟล์ โมดูลเสียเงินเปลี่ยนมันเป็นผลิตภัณฑ์ที่ลูกค้าของคุณจ่ายเงิน
Branded Share
ส่งลิงก์แบบบริการตัวเองที่มีแบรนด์ของคุณไปยังไฟล์หรือโฟลเดอร์ใด ๆ — พร้อมหมดอายุ รหัสผ่าน จำกัดดาวน์โหลด และการวิเคราะห์การดู โลโก้ของคุณ โดเมนของคุณ
- ลิงก์หมดอายุ / ป้องกันด้วยรหัสผ่าน
- จำกัดดาวน์โหลด + วิเคราะห์การดู
- โทเคนจำกัดขอบเขต — ผู้รับไม่ต้องมีบัญชี
Upload Portals
หน้า «ส่งไฟล์ให้เรา» สาธารณะที่ลงตรงสู่พื้นที่เก็บของคุณ เหมาะกับเอเจนซี ช่างภาพ และการออนบอร์ดลูกค้า — ผู้อัปโหลดไม่ต้องมีบัญชี
- พอร์ทัลสาธารณะ → บัคเก็ตของคุณ
- จำกัดขนาด / ประเภท / หมดอายุต่อพอร์ทัล
- อัปโหลดนิรนาม จำกัดตามเจ้าของ
Compliance bundle
สแกนไวรัส, ที่มาเนื้อหา C2PA และเก็บ audit — สำหรับการใช้งานที่มีกฎระเบียบและองค์กร
WordPress
ปลั๊กอินเดียวแทนสามตัว
บน WordPress, FluxFiles เป็นทั้งพอร์ทัลไฟล์ลูกค้าและตัวจัดการสื่อ — แทนปลั๊กอินโฟลเดอร์ คลาวด์ และ offload แยกกัน
| ความสามารถ | FluxFiles | FileBird | WP Media Folder | WP Offload |
|---|---|---|---|---|
| โฟลเดอร์สื่อ | — | |||
| พื้นที่เก็บ S3 / R2 / SFTP | — | |||
| Offload + เขียน URL ใหม่ | — | — | ||
| พอร์ทัลอัปโหลดลูกค้า | — | — | — | |
| ลิงก์แชร์มีแบรนด์ | — | — | — | |
| ราคาทั่วไป | หนึ่งไลเซนส์ | $49/ปี | $69/ปี | เสียเงิน |
โฟลเดอร์ + คลาวด์ + offload + พอร์ทัลลูกค้าในตัวเดียว — แทนที่จะจ่าย FileBird และ WP Media Folder และ WP Offload แยกกัน
ราคา
คอร์ฟรี จ่ายเฉพาะโมดูลแบบเสียเงิน
คอร์ MIT ฟรีตลอดไป อัปเกรดเป็นสองผลิตภัณฑ์หลัก — Branded Share + Upload Portals — และมากกว่านั้น
ฟรี (คอร์)
ตัวจัดการไฟล์ MIT ครบชุด โฮสต์เอง
เริ่มต้น- พื้นที่เก็บ Local / S3 / R2 / SFTP ขอบเขต JWT
- WebP + AVIF ตามต้องการ + ปรับแต่งรูป/PDF
- ลายน้ำ, hook เวอร์ชัน, แดชบอร์ดการใช้งาน, แท็กอัตโนมัติด้วย AI
- 7 อะแดปเตอร์ + BYO-embed เทอร์มินัล / PDF / office / เซ็นอิเล็กทรอนิกส์
Pro
ส่งและรับไฟล์กับลูกค้า
เร็ว ๆ นี้เร็ว ๆ นี้- ทุกอย่างในฟรี
- Branded Share — ลิงก์แบบหมดอายุ / รหัสผ่าน / จำกัด / วิเคราะห์
- Upload Portals — «ส่งไฟล์ให้เรา» สาธารณะ ไม่ต้องมีบัญชี
- ซัพพอร์ตลำดับแรก + อัปเดต
Studio
สร้างผลิตภัณฑ์บน FluxFiles
เร็ว ๆ นี้เร็ว ๆ นี้- ทุกอย่างใน Pro
- จัดการเวอร์ชัน + Webhooks (Zapier/Make/n8n)
- AI Vision + OCR (คีย์ของคุณ)
- ระดับหลายผู้เช่า + ไวต์เลเบล
Enterprise
การปฏิบัติตามข้อกำหนด ในระดับใหญ่
ติดต่อฝ่ายขาย- ทุกอย่างใน Studio
- สแกนไวรัส + ที่มา C2PA + เก็บ audit
- บริดจ์ SSO + ออนบอร์ดแบบกำหนดเอง
- SLA + โรดแมปลำดับแรก
ราคาคงที่ ไม่จำกัดไซต์ — ไม่คิดตามไฟล์/การเรียก รายปีประหยัด ~2 เดือน มีตัวเลือกตลอดชีพ คืนเงินภายใน 14 วัน ภาษีผู้ซื้อจัดการตอนชำระเงิน
คำถามที่พบบ่อย
คำถามที่พบบ่อย
FluxFiles ฟรีและโอเพนซอร์สหรือไม่?
ไฟล์ของฉันถูกเก็บไว้ที่ไหน?
การยืนยันตัวตนทำงานอย่างไร?
ผู้ใช้ของฉันต้องมีบัญชี FluxFiles ไหม?
ฝังลงในแอปหรือเอดิเตอร์ที่มีอยู่ได้ไหม?
ต้องใช้อะไรในการรัน?
แพ็กเกจเสียเงินมีอะไรบ้าง?
เปิดใช้งานไลเซนส์อย่างไร?
จ่ายครั้งเดียวหรือสมัครสมาชิก?
พร้อมฝัง FluxFiles แล้วหรือยัง?
เพิ่มตัวจัดการไฟล์พร้อมใช้งานจริงลงในแอปของคุณได้ในไม่กี่นาที — ไม่ผูกกับเฟรมเวิร์ก ใบอนุญาต MIT