مدير الملفات القابل للتضمين في أي مكان
PHP ≥ 8.1 + Flysystem 3. واجهة Alpine.js. Local، S3، Cloudflare R2، SFTP. ضمِّنه بأسطر قليلة من JavaScript.
شاهده أثناء العمل
ملفات عملائك تبقى في حاويات عملائك
FluxFiles هو مدير الملفات القابل للتضمين حيث يربط كل مستأجر حاوية S3/R2 الخاصة به — ولا تخزّن أنت بياناتهم ولا بيانات اعتمادهم.
-
سيادة البيانات
تُخزَّن الملفات في حساب العميل السحابي ومنطقته — مصمَّم لـ GDPR والامتثال والمشتريات المؤسسية.
-
لا بيانات ولا مفاتيح في حالة السكون
تُشفَّر بيانات اعتماد الحاوية بـ AES-256-GCM داخل الـ JWT وتُفكّ فقط أثناء التشغيل — ولا تُكتب أبدًا في قاعدة بيانات أو سجل.
-
تكلفة تخزين تتقلّص إلى الصفر
يُحتسب التخزين والنقل على كل عميل، لا عليك. لا فاتورة تخزين تنمو مع قاعدة مستخدميك.
-
بلا حالة وقابل للتضمين
لا قاعدة بيانات مركزية. أدرج المُنتقي في أي تطبيق عبر 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 ومتعددة المستأجرين
امنح كل عميل مدير ملفات على حاويته الخاصة. تحديد نطاق الرمز لكل مستأجر وسيادة البيانات مدمجان.
الوكالات والمستقلون
سلّم لكل عميل مكتبة وسائط أنيقة دون إقامة بنية تخزين لكل مشروع.
تكاملات أنظمة إدارة المحتوى والمحررات
أضف مُنتقي وسائط إلى CKEditor أو TinyMCE أو Summernote أو محررك الخاص عبر iframe SDK.
الأدوات الداخلية ولوحات التحكم
أضف الرفع والمعاينات وعمليات الملفات المدققة إلى لوحات الإدارة في فترة بعد الظهر.
كل ما يحتاجه مدير ملفات حديث
مصمم للمطورين الذين يحتاجون المرونة.
تخزين متعدد
محلي، AWS S3، Cloudflare R2, SFTP عبر Flysystem v3 — التبديل بالإعداد دون تغيير الكود.
تضمين في أي مكان
iframe + SDK postMessage. الواجهة المستقلة Alpine.js (بدون بناء). يعمل مع أي إطار.
مصادقة JWT + نطاقات
بادئة مسار لكل مستخدم، صلاحيات، قائمة أقراص، وضع المالك فقط.
وسم AI تلقائي
Claude / OpenAI vision — نص بديل وعنوان ووسوم تلقائية.
اقتصاص الصور
أداة اقتصاص مع نسب أبعاد مسبقة.
تحسين الصور
متغيرات WebP تلقائية — مصغّرة ومتوسطة وكبيرة.
رفع بتوقيع مسبق
المتصفح يرفع مباشرة إلى S3/R2 — صفر استهلاك على خادمك.
رفع مجزّأ
S3 multipart للملفات > 10 ميجابايت.
بحث نصي كامل
بحث مفهرس في الأسماء والعناوين والوسوم — قائم على الملفات، بلا قاعدة بيانات.
عمليات جماعية
تحديد متعدد للنقل والنسخ والحذف والتحميل.
نقل عبر الأقراص
نسخ/نقل بين محلي ↔ 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 في دقائق.
Node token SDK
أصدر رموز FluxFiles من أي خادم JS (Express أو Next.js أو Nuxt) عبر @fluxfiles/node — متوافق بايتيًا مع نواة PHP. لا حاجة إلى PHP لإصدار الرموز.
قرص SFTP
محرّك ثالث بعد S3/R2 — حوّل أي VPS أو استضافة إلى مدير ملفات.
محرّر الكود / الإعدادات
حرّر الملفات النصية والإعدادات (wp-config.php، .env) من المتصفح بأسلوب cPanel.
ضغط وفك ضغط
نزّل تحديدًا كملف zip أو استخرج أرشيفًا — محمي ضد zip-slip والقنابل.
علامة مائية
أضف علامة مائية نصية أو شعارًا فوريًا لحماية المعاينة — دون المساس بالأصل.
WebP + AVIF عند الطلب
قدّم أي حجم صورة كـ AVIF/WebP مخزّن مؤقتاً عبر رابط واحد (متفاوَض عبر Accept)، مع srcset متجاوب جاهز.
أذونات SFTP
غيّر أذونات يونكس (chmod) على أقراص SFTP عبر نافذة بأسلوب cPanel.
لوحة الاستخدام
اطّلع على التخزين بنظرة — الحصة مع تفصيل حسب النوع والمجلد.
معاينة الوسائط
معاينة مدمجة للصور والفيديو والصوت و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 });
}); <!-- 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 ضمن بنيتك، وكل مستأجر على حاويته الخاصة.
| القدرة | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| مُستضاف ذاتيًا (يعمل في بنيتك) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — حاوية خاصة لكل عميل | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| واجهة مدير ملفات قابلة للتضمين | ✓ | ✓ | ✓ | ⚠ | ✗ |
| مفتوح المصدر (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| بلا رسوم SaaS لكل تخزين / لكل رفع | ✓ | ✗ | ✗ | ✗ | ⚠ |
| تخزين متعدد (S3 / R2 / محلي) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| تحديد نطاق الرمز لكل مستأجر مدمج | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
تعكس المقارنة العروض الافتراضية المعتادة؛ كل منتج يتفوّق في مجاله. تخصّص FluxFiles هو الجمع بين القابلية للتضمين والاستضافة الذاتية وإحضار حاويتك الخاصة.
منتجات قابلة للبيع
أكثر من إدارة الملفات — بِعها واستقبلها
النواة المجانية تُضمِّن مدير ملفات. الوحدات المدفوعة تحوّله إلى منتجات يدفع مقابلها عملاؤك.
Branded Share
أرسل رابطاً ذاتي الخدمة بعلامتك إلى أي ملف أو مجلد — بانتهاء وكلمة مرور وحد تنزيل وتحليلات مشاهدة. شعارك، نطاقك.
- روابط منتهية / محمية بكلمة مرور
- حدود تنزيل + تحليلات مشاهدة
- رمز مقيّد — لا حساب للمستلم
Upload Portals
صفحة عامة «أرسل لنا ملفاتك» تصل مباشرة إلى تخزينك. مثالية للوكالات والمصورين وإعداد العملاء — لا حساب لمن يرفع.
- بوابة عامة → مخزنك
- حدود الحجم / النوع / الانتهاء لكل بوابة
- رفع مجهول، مقيّد بالمالك
Compliance bundle
فحص الفيروسات، مصدر محتوى C2PA وحفظ التدقيق — لعمليات النشر المنظَّمة والمؤسسية.
WordPress
إضافة واحدة بدل ثلاث
في WordPress، FluxFiles هو بوابة ملفات للعملاء ومدير وسائط معاً — يستبدل إضافات المجلدات والسحابة والإخلاء المنفصلة.
| القدرة | FluxFiles | FileBird | WP Media Folder | WP Offload |
|---|---|---|---|---|
| مجلدات الوسائط | — | |||
| تخزين S3 / R2 / SFTP | — | |||
| إخلاء + إعادة كتابة الروابط | — | — | ||
| بوابات رفع العملاء | — | — | — | |
| روابط مشاركة بعلامة | — | — | — | |
| السعر المعتاد | ترخيص واحد | $49/سنة | $69/سنة | مدفوع |
مجلدات + سحابة + إخلاء + بوابات عملاء في واحد — بدلاً من دفع FileBird وWP Media Folder وWP Offload بشكل منفصل.
الأسعار
النواة مجانية. ادفع فقط مقابل الوحدات المدفوعة.
نواة MIT مجانية للأبد. ترقَّ إلى المنتجَين الرئيسيَّين — المشاركة ذات العلامة + بوابات الرفع — وأكثر.
مجاني (النواة)
مدير ملفات MIT الكامل، مستضاف ذاتياً.
ابدأ- تخزين Local / S3 / R2 / SFTP، نطاق JWT
- WebP + AVIF عند الطلب + تحسين الصور/PDF
- علامة مائية، خطاف الإصدارات، لوحة الاستخدام، وسم آلي بالذكاء الاصطناعي
- 7 محولات + BYO-embed طرفية / PDF / office / توقيع إلكتروني
Pro
أرسل واستقبل الملفات مع عملائك.
قريباًقريباً- كل ما في المجاني
- المشاركة ذات العلامة — روابط بانتهاء / كلمة مرور / حد / تحليلات
- بوابات الرفع — «أرسل لنا ملفات» عامة، بلا حساب
- دعم أولوية + تحديثات
Studio
ابنِ منتجاً على FluxFiles.
قريباًقريباً- كل ما في Pro
- إدارة الإصدارات + Webhooks (Zapier/Make/n8n)
- رؤية الذكاء الاصطناعي + OCR (مفتاحك)
- طبقات متعددة المستأجرين + علامة بيضاء
Enterprise
الامتثال، على نطاق واسع.
تواصل مع المبيعات- كل ما في Studio
- فحص الفيروسات + مصدر C2PA + حفظ التدقيق
- جسر SSO + إعداد مخصص
- SLA + خارطة طريق ذات أولوية
سعر ثابت، مواقع غير محدودة — بلا فوترة لكل ملف/طلب. السنوي يوفّر ~شهرين؛ يتوفر خيار مدى الحياة. استرداد خلال 14 يوماً. ضريبة المشتري تُعالَج عند الدفع.
الأسئلة الشائعة
الأسئلة المتكررة
هل FluxFiles مجاني ومفتوح المصدر؟
أين تُخزَّن ملفاتي؟
كيف تعمل المصادقة؟
هل يحتاج مستخدموي إلى حساب FluxFiles؟
هل يمكنني تضمينه في تطبيقي أو محرّري الحالي؟
ماذا أحتاج لتشغيله؟
ماذا تتضمن الباقات المدفوعة؟
كيف أفعّل الترخيص؟
دفعة واحدة أم اشتراك؟
هل أنت مستعد لتضمين FluxFiles؟
أضف مدير ملفات جاهزًا للإنتاج إلى تطبيقك في دقائق — دون الارتباط بأي إطار عمل، وبرخصة MIT.