Ürün — FluxFiles

Özellikler

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ış.

Hızlı kurulum

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

Laravel WordPress React / Next.js Vue / Nuxt CKEditor 4 TinyMCE Summernote Any framework

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.

Laravel
PHP
WordPress
Plugin
React
Component
Vue / Nuxt
Component
CKEditor 4
Plugin
TinyMCE
Plugin
Summernote
Plugin

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.

Neden FluxFiles

Başkalarının unuttuğu şeyler için tasarlandı

Karşılaştırmak için kaydırın
Ö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

Sıkça sorulan sorular

Kimlik doğrulama nasıl çalışır?
Durumsuz JWT (HS256): sunucuda ayrıntılı talep'lerle (izinler, diskler, yol kapsamı, limitler) bir token üretirsiniz; böylece her kullanıcı yalnızca izin verdiğinizi görür.
Kullanıcılarımın FluxFiles hesabına ihtiyacı var mı?
Hayır. FluxFiles kendi uygulamanızın verdiği JWT'ye güvenir, böylece mevcut kimlik doğrulamanıza doğrudan bağlanır — ayrı bir kullanıcı sistemi yok.
Çalıştırmak için neye ihtiyacım var?
Birkaç yaygın eklenti ile PHP 8.1+ ve Composer. Bir diske yönlendirin, bir secret ve izin verilen origin'leri ayarlayın, ardından sunun — küçük bir VPS'te çalışır.
Farklı kullanıcılar farklı izinlere sahip olabilir mi?
Evet. İnce ayarlı claim'lerle (okuma/yazma/silme, disk, yol öneki, yükleme sınırları, izin verilen uzantılar, owner-only) bir token oluşturun veya her claim'i tek tek yazmak yerine tokeni tek satırda sınırlamak için dört yerleşik rol ön ayarından birini — viewer, editor, admin, superadmin — kullanın.
Veritabanı çalıştırmam gerekiyor mu?
Hayır. Varsayılan olarak tüm meta veriler (dosya bilgisi, arama dizini, denetim günlüğü) dosyalarınızın yanında JSON yardımcı dosyaları olarak durur — kurulacak veya yedeklenecek ekstra bir şey yoktur. Bu kayıtları kendi MySQL, PostgreSQL veya SQLite veritabanınızda tutmayı tercih ederseniz, isteğe bağlı FLUXFILES_STORAGE_BACKEND=db modu bunları oraya taşır; dosya baytları her durumda depolama alanınızda kalır.
Herhangi bir kullanım sınırı var mı?
Çekirdeğin kendisi yapay bir sınır koymaz — aylık aktif kullanıcı üst sınırı yoktur, zorunlu yükseltme uyarısı yoktur. Kendi sınırlarınızı JWT claim'leri üzerinden siz belirlersiniz: kullanıcı başına depolama kotaları, yükleme boyutu/uzantı kısıtlamaları ve yerleşik bir hız sınırlayıcı (varsayılan olarak dakikada 60 okuma / 10 yazma, yapılandırılabilir).