Ü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
Ücretsiz terminal_pty_url claim'i ile kendi ttyd / gotty / wetty'nizi SFTP disklerinde uygulama içi terminal olarak gömün — FluxFiles kendi kabuğunu (shell) sunmaz.
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 vendor/fluxfiles/fluxfiles/.env.example vendor/fluxfiles/fluxfiles/.env # vendor/fluxfiles/fluxfiles/.env (read only from inside the package)
# Real environment variables win over this file and are preferred in production
# (Composer may remove a vendor .env on update).
FLUXFILES_SECRET=<output of: openssl rand -hex 32>
FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com <?php
require_once 'vendor/autoload.php';
// embed.php is not autoloaded — require it for fluxfiles_token()
require_once 'vendor/fluxfiles/fluxfiles/embed.php';
$token = fluxfiles_token([
'user' => 'user-123',
'perms' => ['read', 'write', 'delete'],
'disks' => ['local'], // s3 / r2 need their own credentials in .env
'prefix' => 'user-123/',
'ttl' => 3600,
]); php vendor/bin/fluxfiles serve --port=8080
# then open http://127.0.0.1:8080/public/ composer require fluxfiles/laravel
php artisan vendor:publish --tag=fluxfiles-config
php artisan storage:link # .env — proxy mode is the default: the API runs through your Laravel routes,
# no separate FluxFiles server is needed.
FLUXFILES_SECRET=<output of: openssl rand -hex 32>
# Only for FLUXFILES_MODE=standalone (FluxFiles on its own server):
# FLUXFILES_MODE=standalone
# FLUXFILES_ENDPOINT=https://fm.yourdomain.com <?php
// app/FluxFiles/TenantClaims.php — REQUIRED: without a claims resolver
// <x-fluxfiles> renders "not available".
namespace App\FluxFiles;
use FluxFiles\Laravel\ClaimsResolver;
use Illuminate\Contracts\Auth\Authenticatable;
class TenantClaims implements ClaimsResolver
{
public function resolve(Authenticatable $user): array
{
return [
'prefix' => 'users/' . $user->getAuthIdentifier(),
];
}
} // config/fluxfiles.php
'claims_resolver' => \App\FluxFiles\TenantClaims::class, // Laravel 11 / 12 — bootstrap/app.php: exclude the proxy routes from CSRF (else 419)
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: ['api/fm/*']);
})
// Laravel 10 — app/Http/Middleware/VerifyCsrfToken.php
// protected $except = ['api/fm/*']; <x-fluxfiles disk="local" mode="picker" height="600px" /> # Not yet on WordPress.org — install the release zip:
# 1. Download fluxfiles-<version>.zip from https://github.com/thai-pc/fluxfiles/releases
# 2. Plugins -> Add New -> Upload Plugin -> Activate
# 3. Settings -> FluxFiles: set the JWT secret (>= 32 bytes) and storage
# 4. Add the shortcode (or the FluxFiles block) to any page or post: [fluxfiles] npm install @fluxfiles/node # Node >= 16 // 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)
import os
from fastapi import Depends
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} {
"mcpServers": {
"fluxfiles": {
"command": "npx",
"args": ["-y", "@fluxfiles/mcp"],
"env": {
"FLUXFILES_URL": "<your FluxFiles URL>",
"FLUXFILES_TOKEN": "<scoped JWT>"
}
}
}
} # Claude Code (Node >= 18)
claude mcp add fluxfiles -e FLUXFILES_URL=<your FluxFiles URL> -e FLUXFILES_TOKEN=<scoped JWT> -- npx -y @fluxfiles/mcp # Read-only by default. Opt in to writes:
FLUXFILES_MCP_WRITE=1
# and to move_to_trash:
FLUXFILES_MCP_DELETE=1 Ajan yalnızca JWT'sinin izin verdiği şeylere dokunabilir — diskleri, yol öneki ve izinleri. Ona dar kapsamlı, salt okunur bir token verin.
npm install fluxfiles <!-- or load a pinned CDN build (never @latest) -->
<script src="https://unpkg.com/fluxfiles@1.0.1/fluxfiles.js"></script> <div id="file-picker" style="height:600px"></div>
<script>
FluxFiles.open({
endpoint: 'https://your-fluxfiles-host',
token: 'eyJhbGci...', // JWT minted by your backend
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"
/> docker run -p 8080:80 \
-e FLUXFILES_SECRET="$(openssl rand -hex 32)" \
-e FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com \
-v fluxfiles-data:/app/packages/core/storage \
ghcr.io/thai-pc/fluxfiles:1.1 # UI: http://localhost:8080/public/ git clone https://github.com/thai-pc/fluxfiles.git
cd fluxfiles/packages/core
composer install
cp .env.example .env # packages/core/.env — the placeholder secret is rejected, set a real one
FLUXFILES_SECRET=<output of: openssl rand -hex 32>
FLUXFILES_ALLOWED_ORIGINS=http://localhost:8080 # print dev tokens (run from the repo root)
php packages/core/tests/generate-token.php php -S localhost:8080 router.php
# UI: http://localhost:8080/public/index.html?token=<token>
# ?token= is dev-only — it is stripped from the URL on boot.
# Real apps pass the JWT via the SDK / postMessage, never in a URL. Canlıya alırken: en az 32 baytlık bir FLUXFILES_SECRET ile FLUXFILES_ALLOWED_ORIGINS (veya FLUXFILES_FRAME_ANCESTORS) ayarlayın. Paket kökünü web document root yapın ve nginx'te /_fluxfiles/ ile .env erişimini engelleyin. Ana JWT'yi asla URL'ye koymayın — adaptörler onu postMessage ile iletir. DEPLOYMENT.md
Ş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.
CKEditor veya TinyMCE'yi kendi depolamanızla kullanın; CKBox ya da Tiny Drive aboneliği gerekmez. FluxFiles dosyalara göz atmak ve eklemek için bir araç çubuğu düğmesi ekler; bu ürünlerin özellik özellik yerine geçmez.
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.
<!-- npm install fluxfiles, or a pinned CDN build -->
<script src="https://unpkg.com/fluxfiles@1.0.1/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 November 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