المنتج — FluxFiles
كل ما يحتاجه مدير ملفات حديث
مصمم للمطورين الذين يحتاجون المرونة.
تخزين متعدد
محلي، AWS S3، Cloudflare R2, SFTP عبر Flysystem v3 — التبديل بالإعداد دون تغيير الكود.
تضمين في أي مكان
iframe + SDK postMessage. الواجهة المستقلة Alpine.js (بدون بناء). يعمل مع أي إطار.
مصادقة JWT + نطاقات
بادئة مسار لكل مستخدم، صلاحيات، قائمة أقراص، وضع المالك فقط — أو ابدأ من إعداد دور جاهز viewer/editor/admin.
إعدادات دور ACL الجاهزة
أصدر التوكنات من إعدادات جاهزة viewer/editor/admin/superadmin — معامل واحد يُفعّل صلاحيات وقرص ونطاق الوصول الصحيحة بدل تجميعها يدويًا.
وسم AI تلقائي
Claude / OpenAI vision — نص بديل وعنوان ووسوم تلقائية.
اقتصاص الصور
أداة اقتصاص مع نسب أبعاد مسبقة.
تحسين الصور
متغيرات WebP تلقائية — مصغّرة ومتوسطة وكبيرة.
رفع بتوقيع مسبق
المتصفح يرفع مباشرة إلى S3/R2 — صفر استهلاك على خادمك.
رفع مجزّأ
S3 multipart للملفات > 10 ميجابايت.
بحث نصي كامل
بحث مفهرس في الأسماء والعناوين والوسوم — قائم على الملفات افتراضيًا، أو قاعدة بيانات SQL خاصة بك كخيار.
تخزين البيانات الوصفية في قاعدة بيانات
وضع اختياري FLUXFILES_STORAGE_BACKEND=db — البيانات الوصفية وفهرس البحث/المجلدات وسجل التدقيق تُخزَّن في قاعدة MySQL/PostgreSQL/SQLite الخاصة بك بدل ملفات JSON. تبقى بيانات الملفات نفسها في مساحة التخزين في الحالتين.
عمليات جماعية
تحديد متعدد للنقل والنسخ والحذف والتحميل.
نقل عبر الأقراص
نسخ/نقل بين محلي ↔ S3 ↔ R2.
سلة المحذوفات
حذف قابل للاسترداد مع تنظيف تلقائي.
بيانات SEO الوصفية
عنوان، alt، تعليق، وسوم — بيانات وصفية S3 (سحابة) أو JSON جانبي (محلي). بحث نصي كامل.
الوضع الداكن
فاتح / داكن / تلقائي في الواجهة وSDK.
16 لغة
الإنجليزية افتراضياً. عيّن اللغة عبر SDK أو URL (?locale=) أو FLUXFILES_LOCALE. RTL للعربية.
سجل التدقيق
جميع إجراءات الكتابة مسجّلة.
تحديد المعدل
Token bucket لكل مستخدم لحماية API.
حصة التخزين
حدود لكل مستخدم عبر JWT claims.
دلاء BYOB
المستخدمون يضيفون S3/R2 الخاص — بيانات الاعتماد مشفّرة في JWT (AES-256-GCM).
كشف التكرار
تطابق SHA-256 يتخطى الرفع الزائد ما لم يُفرض الاستبدال.
تجديد رمز SDK
onTokenRefresh عند 401 — تجديد مجمّع، إعادة محاولة، updateToken().
Bucket Doctor
شخّص أي قرص S3/R2 — بيانات الاعتماد، القراءة/الكتابة/الحذف، presign، CORS، multipart — مع إصلاحات IAM وCORS جاهزة للّصق. أضِف حاويات BYOB في دقائق.
قرص SFTP
محرّك ثالث بعد S3/R2 — حوّل أي VPS أو استضافة إلى مدير ملفات.
محرّر الكود / الإعدادات
حرّر الملفات النصية والإعدادات (wp-config.php، .env) من المتصفح بأسلوب cPanel.
ضغط وفك ضغط
نزّل تحديدًا كملف zip أو استخرج أرشيفًا — محمي ضد zip-slip والقنابل.
علامة مائية
أضف علامة مائية نصية أو شعارًا فوريًا لحماية المعاينة — دون المساس بالأصل.
WebP + AVIF عند الطلب
قدّم أي حجم صورة كـ AVIF/WebP مخزّن مؤقتاً عبر رابط واحد (متفاوَض عبر Accept)، مع srcset متجاوب جاهز.
أذونات SFTP
غيّر أذونات يونكس (chmod) على أقراص SFTP عبر نافذة بأسلوب cPanel.
طرفية SSH
طرفية لتشغيل الأوامر بلا حالة على أقراص SFTP — أداة إدارة بأسلوب cPanel، مدمجة ومجانية (أو ادمج ttyd خاص بك للحصول على PTY كامل).
نشر Git بنقرة واحدة
اسحب وأعد ضبط مستودع Git على خادم SFTP مباشرة من مدير الملفات — شكل ثابت، ليس صدفة عشوائية، والخطافات معطّلة افتراضيًا.
لوحة الاستخدام
اطّلع على التخزين بنظرة — الحصة مع تفصيل حسب النوع والمجلد.
معاينة الوسائط
معاينة مدمجة للصور والفيديو والصوت وPDF؛ بث آمن للوسائط المحلية الخاصة.
جاهز خلال دقيقتين
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 | ✓ | ✓ | ✗ | ✓ | ✓ |
| صيانة نشطة | ✓ | ✓ | ⚠ | ✗ | ✗ |
| واجهة حديثة | ✓ | ✗ | ⚠ | ✗ | ✗ |
| القدرة | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| مُستضاف ذاتيًا (يعمل في بنيتك) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — حاوية خاصة لكل عميل | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| واجهة مدير ملفات قابلة للتضمين | ✓ | ✓ | ✓ | ⚠ | ✗ |
| مفتوح المصدر (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| بلا رسوم SaaS لكل تخزين / لكل رفع | ✓ | ✗ | ✗ | ✗ | ⚠ |
| تخزين متعدد (S3 / R2 / محلي) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| تحديد نطاق الرمز لكل مستأجر مدمج | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
تعكس المقارنة العروض الافتراضية المعتادة؛ كل منتج يتفوّق في مجاله. تخصّص FluxFiles هو الجمع بين القابلية للتضمين والاستضافة الذاتية وإحضار حاويتك الخاصة.
المقارنة محدّثة حتى September 2026، وهي غير رسمية — راجع مستودع GitHub للإبلاغ عن أي تصحيح.
الأسئلة الشائعة