Ürün — FluxFiles
Modern bir dosya yöneticisinin ihtiyacı olan her şey
Esneklik isteyen geliştiriciler için tasarlandı.
Çoklu depolama
Yerel, AWS S3, Cloudflare R2, SFTP — Flysystem v3 ile. Yapılandırmayla değiştirin.
Her yere gömün
iframe + postMessage SDK. Bağımsız UI Alpine.js (derleme yok). Her framework ile çalışır.
JWT kimlik doğrulama + kapsam
Kullanıcı başına yol öneki, izinler, disk beyaz listesi, yalnızca sahip modu — veya viewer/editor/admin rol ön ayarıyla başlayın.
ACL rol ön ayarları
viewer/editor/admin/superadmin ön ayarlarından token üretin — tek bir parametre, doğru izin, disk ve kapsam claim'lerini elle bir araya getirmek yerine otomatik açar.
AI otomatik etiket
Claude / OpenAI vision — otomatik alt metin, başlık, etiketler.
Görüntü kırpma
En-boy oranı ön ayarlı satır içi kırpma aracı.
Görüntü optimizasyonu
Otomatik WebP varyantları — küçük, orta, büyük.
Ön imzalı yüklemeler
Tarayıcı doğrudan S3/R2'ye yükler — sunucunuzda sıfır bant genişliği.
Parçalı yükleme
10MB üzeri dosyalar için S3 multipart.
Tam metin arama
İsim, başlık, etiketlerde dizinli arama — varsayılan olarak dosya tabanlı, isteğe bağlı olarak kendi SQL veritabanınız arka uç olarak.
Veritabanı destekli meta veri
İsteğe bağlı FLUXFILES_STORAGE_BACKEND=db modu — meta veriler, arama/klasör indeksi ve denetim günlüğü JSON yan dosyaları yerine kendi MySQL/PostgreSQL/SQLite veritabanınızda tutulur. Dosya baytları her iki durumda da depolamada kalır.
Toplu işlemler
Çoklu seçim: taşıma, kopyalama, silme, indirme.
Diskler arası transfer
Yerel ↔ S3 ↔ R2 arasında kopyalama/taşıma.
Çöp kutusu
Kurtarılabilir silme, otomatik temizleme.
SEO meta verileri
Başlık, alt, açıklama, etiketler — S3 nesne meta verisi (bulut) veya sidecar JSON (yerel). Tam metin arama.
Karanlık mod
Açık / koyu / otomatik — UI ve SDK'da.
16 dil
Varsayılan İngilizce. SDK, URL (?locale=) veya FLUXFILES_LOCALE ile ayarlayın. Arapça RTL.
Denetim günlüğü
Tüm yazma işlemleri kaydedilir.
Hız sınırlama
Kullanıcı başına token bucket API koruması.
Depolama kotası
JWT claims ile kullanıcı başına limitler.
BYOB kovaları
Kullanıcılar kendi S3/R2'sini ekler — kimlik bilgileri JWT'de şifreli (AES-256-GCM).
Yinelenen algılama
SHA-256 eşleşmesi zorla yazma dışında gereksiz yüklemeleri atlar.
SDK belirteci yenileme
401'de onTokenRefresh — birleşik yenileme, yeniden deneme, updateToken().
Bucket Doctor
Herhangi bir S3/R2 diskini teşhis edin — kimlik bilgileri, okuma/yazma/silme, presign, CORS, multipart — yapıştırmaya hazır IAM ve CORS düzeltmeleriyle. BYOB bucket'larını dakikalar içinde ekleyin.
SFTP diski
S3/R2'den sonra 3. sürücü — herhangi bir VPS veya hosting'i dosya yöneticisine dönüştürün.
Kod / yapılandırma düzenleyici
Metin ve yapılandırma dosyalarını (wp-config.php, .env) tarayıcıda düzenleyin.
Zip ve Çıkarma
Seçimi zip olarak indirin veya arşivi yerinde çıkarın — zip-slip & bomb korumalı.
Filigran
Önizleme koruması için anında metin/logo filigranı — kaynak dosyaya dokunulmaz.
İstek üzerine WebP + AVIF
Herhangi bir görsel boyutunu tek bir URL üzerinden önbelleklenmiş AVIF/WebP olarak sunun (Accept ile pazarlıklı), hazır duyarlı srcset ile.
SFTP izinleri
SFTP disklerinde Unix dosya izinlerini (chmod) cPanel tarzı pencereyle değiştirin.
SSH terminali
SFTP disklerinde durumsuz komut çalıştırma terminali — cPanel tarzı yönetim aracı, dahili ve ücretsiz (veya tam PTY için kendi ttyd'inizi gömün).
Tek tıkla Git dağıtımı
Dosya yöneticisinden doğrudan SFTP sunucunuzdaki bir Git deposunu pull ve reset edin — sabit biçim, keyfi bir kabuk değil, hook'lar varsayılan olarak kapalı.
Kullanım panosu
Depolamayı bir bakışta görün — kota artı türe ve klasöre göre dağılım.
Medya önizleme
Satır içi görsel, video, ses ve PDF önizleme; özel yerel medya güvenli akış.
2 dakikada hazır
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= Şunlarla çalışır
Entegrasyonlar
Yığınınız için hazır adaptörler
Resmi adaptörler, FluxFiles'ı zaten kullandığınız çerçevelere ve editörlere yerel olarak gömer.
Gömme
Birkaç satırda gömün
fluxfiles.js'i yükleyin, sunucuda üretilen bir JWT geçirin ve herhangi bir sayfaya tam bir dosya yöneticisi — ya da dosya seçme penceresi — yerleştirin.
<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)}
/>
);
} Token'lar sunucu tarafında üretilir — secret'ınızı asla tarayıcıya göndermeyin.
Başkalarının unuttuğu şeyler için tasarlandı
| Özellik | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Yerel + SFTP | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| Her framework'e gömme | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT kimlik doğrulama + kapsam | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO meta verileri | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI otomatik etiket | ✓ | ✗ | ✗ | ✗ | ✗ |
| Görüntü kırpma | ✓ | ✓ | ✗ | ✗ | ✗ |
| Parçalı yükleme | ✓ | ✗ | ✗ | ✗ | ✗ |
| Tam metin arama | ✓ | ✗ | ✗ | ✗ | ✗ |
| Karanlık mod | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 dil | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| Aktif olarak bakımı yapılıyor | ✓ | ✓ | ⚠ | ✗ | ✗ |
| Modern UI | ✓ | ✗ | ⚠ | ✗ | ✗ |
| Yetenek | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| Kendi sunucunuzda (altyapınızda çalışır) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — her müşterinin kendi bucket'ı | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| Gömülebilir dosya yöneticisi arayüzü | ✓ | ✓ | ✓ | ⚠ | ✗ |
| Açık kaynak (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| Depolama / yükleme başına SaaS ücreti yok | ✓ | ✗ | ✗ | ✗ | ⚠ |
| Çoklu depolama (S3 / R2 / yerel) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| Kiracı başına yerleşik jeton kapsamı | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
Karşılaştırma tipik varsayılan sunumları yansıtır; her ürün kendi alanında öne çıkar. FluxFiles'ın nişi gömülebilir, kendi sunucusunda ve bring-your-own-bucket birleşimidir.
Karşılaştırma September 2026 tarihi itibarıyla günceldir, bağımsız olarak hazırlanmıştır — bir düzeltme bildirmek için GitHub deposuna bakın.
SSS