प्रोडक्ट — FluxFiles
एक आधुनिक फ़ाइल मैनेजर के लिए सब कुछ
लचीलापन चाहने वाले डेवलपर्स के लिए बनाया गया।
मल्टी-स्टोरेज
Local, AWS S3, Cloudflare R2, SFTP — Flysystem v3 के ज़रिए। कॉन्फ़िग से बदलें।
कहीं भी एम्बेड करें
iframe + postMessage SDK। स्टैंडअलोन UI Alpine.js (बिना बिल्ड)। किसी भी फ्रेमवर्क के साथ।
JWT ऑथ + स्कोपिंग
प्रति-यूज़र पाथ प्रीफ़िक्स, अनुमतियाँ, डिस्क व्हाइटलिस्ट, owner-only मोड — या viewer/editor/admin रोल प्रीसेट से शुरू करें।
ACL रोल प्रीसेट
viewer/editor/admin/superadmin प्रीसेट से टोकन जारी करें — एक पैरामीटर सही permission, disk और scope claims खुद सेट कर देता है, हाथ से जोड़ने की ज़रूरत नहीं।
AI ऑटो-टैग
Claude / OpenAI vision — ऑटो alt टेक्स्ट, टाइटल, टैग्स।
इमेज क्रॉप
आस्पेक्ट रेशियो प्रीसेट के साथ इनलाइन क्रॉप टूल।
इमेज ऑप्टिमाइज़ेशन
ऑटो WebP वेरिएंट — thumb, medium, large।
प्रीसाइन्ड अपलोड
ब्राउज़र सीधे S3/R2 पर अपलोड करता है — आपके सर्वर पर ज़ीरो बैंडविड्थ।
चंक अपलोड
10MB से बड़ी फ़ाइलों के लिए S3 मल्टीपार्ट।
फुल-टेक्स्ट सर्च
नाम, टाइटल, टैग्स में इंडेक्स्ड सर्च — डिफ़ॉल्ट रूप से फ़ाइल-आधारित, या अपना खुद का SQL डेटाबेस वैकल्पिक बैकएंड के तौर पर।
DB-आधारित मेटाडेटा
वैकल्पिक FLUXFILES_STORAGE_BACKEND=db मोड — मेटाडेटा, सर्च/फ़ोल्डर इंडेक्स और ऑडिट लॉग आपके अपने MySQL/PostgreSQL/SQLite में रहते हैं, JSON साइडकार की जगह। फ़ाइल के बाइट्स दोनों ही स्थिति में स्टोरेज में रहते हैं।
बल्क ऑपरेशंस
मल्टी-सेलेक्ट मूव, कॉपी, डिलीट, डाउनलोड।
क्रॉस-डिस्क ट्रांसफर
Local ↔ S3 ↔ R2 के बीच कॉपी/मूव।
ट्रैश
रिकवर करने योग्य डिलीट, ऑटो-पर्ज।
SEO मेटाडेटा
शीर्षक, alt, कैप्शन, टैग — क्लाउड पर S3 ऑब्जेक्ट मेटाडेटा, लोकल पर sidecar JSON। फुल-टेक्स्ट सर्च।
डार्क मोड
UI और SDK में लाइट / डार्क / ऑटो।
16 भाषाएँ
डिफ़ॉल्ट अंग्रेज़ी। SDK, URL (?locale=), या FLUXFILES_LOCALE से सेट करें। अरबी के लिए RTL।
ऑडिट लॉग
सभी राइट एक्शन लॉग।
रेट लिमिटिंग
प्रति-यूज़र टोकन बकेट API सुरक्षा।
स्टोरेज कोटा
JWT claims द्वारा प्रति-यूज़र सीमा।
BYOB बकेट
यूज़र अपना S3/R2 जोड़ते हैं — JWT में क्रेडेंशियल एन्क्रिप्ट (AES-256-GCM)।
डुप्लिकेट पहचान
SHA-256 मैच पर अतिरिक्त अपलोड स्किप, जब तक फोर्स ओवरराइट न हो।
SDK टोकन रिफ़्रेश
401 पर onTokenRefresh — एकीकृत रिफ़्रेश, रीट्राय, और updateToken()।
Bucket Doctor
किसी भी S3/R2 डिस्क का निदान करें — क्रेडेंशियल, रीड/राइट/डिलीट, presign, CORS, multipart — पेस्ट करने के लिए तैयार IAM और CORS फिक्स के साथ। BYOB बकेट मिनटों में जोड़ें।
SFTP डिस्क
S3/R2 के बाद तीसरा ड्राइवर — किसी भी VPS या होस्ट को फ़ाइल मैनेजर बनाएं।
कोड / config एडिटर
ब्राउज़र में टेक्स्ट व कॉन्फ़िग फ़ाइलें (wp-config.php, .env) संपादित करें, cPanel जैसा।
ज़िप और एक्सट्रैक्ट
चयन को zip में डाउनलोड करें या आर्काइव निकालें — zip-slip व bomb से सुरक्षित।
वॉटरमार्क
प्रीव्यू सुरक्षा हेतु टेक्स्ट या लोगो वॉटरमार्क तुरंत लगाएं — मूल फ़ाइल अछूती।
ऑन-डिमांड WebP + AVIF
किसी भी आकार की छवि को एक URL के ज़रिए कैश्ड AVIF/WebP के रूप में परोसें (Accept-नेगोशिएटेड), तैयार रेस्पॉन्सिव srcset के साथ।
SFTP अनुमतियाँ
cPanel जैसे डायलॉग से SFTP डिस्क पर Unix फ़ाइल अनुमतियाँ (chmod) बदलें।
SSH टर्मिनल
SFTP डिस्क पर स्टेटलेस कमांड-रनर टर्मिनल — cPanel जैसा एडमिन टूल, बिल्ट-इन और मुफ़्त (या पूरे PTY के लिए अपना ttyd एम्बेड करें)।
वन-क्लिक Git डिप्लॉय
फ़ाइल मैनेजर से सीधे अपने SFTP सर्वर पर Git रिपॉज़िटरी को pull और reset करें — तय आकार, कोई मनमाना शेल नहीं, hooks डिफ़ॉल्ट रूप से बंद।
उपयोग डैशबोर्ड
स्टोरेज एक नज़र में — कोटा के साथ प्रकार व फ़ोल्डर अनुसार विवरण।
मीडिया प्रीव्यू
इनलाइन इमेज, वीडियो, ऑडियो व 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 });
}); pip install fluxfiles-token
# FastAPI / Django / Flask route — mint a token from your Python backend (no PHP)
from fluxfiles_token import create_token
@app.get("/fluxfiles-token")
def fluxfiles_token(user=Depends(current_user)):
token = create_token(
secret=os.environ["FLUXFILES_SECRET"], # >= 32 bytes
user_id=user.id,
perms=["read", "write", "delete"],
prefix=f"users/{user.id}",
ttl=3600,
)
return {"token": 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 + लोकल + SFTP | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| किसी भी फ्रेमवर्क में एम्बेड | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT ऑथ + स्कोपिंग | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO मेटाडेटा | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI ऑटो-टैग | ✓ | ✗ | ✗ | ✗ | ✗ |
| इमेज क्रॉप | ✓ | ✓ | ✗ | ✗ | ✗ |
| चंक अपलोड | ✓ | ✗ | ✗ | ✗ | ✗ |
| फुल-टेक्स्ट सर्च | ✓ | ✗ | ✗ | ✗ | ✗ |
| डार्क मोड | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 भाषाएँ | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| सक्रिय रूप से मेंटेन | ✓ | ✓ | ⚠ | ✗ | ✗ |
| मॉडर्न UI | ✓ | ✗ | ⚠ | ✗ | ✗ |
| क्षमता | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| सेल्फ-होस्टेड (आपके इन्फ्रा में चलता है) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — हर ग्राहक का अपना बकेट | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| एम्बेड-योग्य फ़ाइल-मैनेजर UI | ✓ | ✓ | ✓ | ⚠ | ✗ |
| ओपन सोर्स (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| कोई प्रति-स्टोरेज / प्रति-अपलोड SaaS शुल्क नहीं | ✓ | ✗ | ✗ | ✗ | ⚠ |
| मल्टी-स्टोरेज (S3 / R2 / लोकल) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| प्रति-टेनेंट टोकन स्कोपिंग अंतर्निहित | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
तुलना सामान्य डिफ़ॉल्ट पेशकशों को दर्शाती है; हर उत्पाद अपने क्षेत्र में उत्कृष्ट है। FluxFiles का niche एम्बेड-योग्य, सेल्फ-होस्टेड, ब्रिंग-योर-ओन-बकेट संयोजन है।
तुलना September 2026 तक की है, यह स्वतंत्र रूप से तैयार की गई है — सुधार बताने के लिए GitHub रिपॉज़िटरी देखें।
सामान्य प्रश्न