Prodotto — FluxFiles
Tutto ciò che serve a un file manager moderno
Progettato per sviluppatori che necessitano di flessibilità.
Multi-storage
Locale, AWS S3, Cloudflare R2, SFTP tramite Flysystem v3 — cambia con la config, senza codice.
Integra ovunque
iframe + SDK postMessage. UI standalone con Alpine.js (zero build). Con qualsiasi framework.
Auth JWT + scoping
Prefisso percorso per utente, permessi, whitelist dischi, modalità solo proprietario — o parti da un preset di ruolo viewer/editor/admin.
Preset di ruolo ACL
Emetti token da preset viewer/editor/admin/superadmin — un solo parametro espande i claim corretti di permessi, disco e ambito invece di assemblarli a mano.
AI auto-tag
Claude / OpenAI vision — alt text, titolo, tag automatici.
Ritaglio immagine
Strumento di ritaglio con proporzioni predefinite.
Ottimizzazione immagine
Varianti WebP automatiche — miniatura, medio, grande.
Upload pre-firmati
Il browser carica direttamente su S3/R2 — zero bandwidth sul tuo server.
Upload a blocchi
S3 multipart per file > 10MB.
Ricerca full-text
Ricerca indicizzata per nomi, titoli, tag — basata su file di default, oppure un tuo database SQL come backend opzionale.
Metadati su database
Modalità opzionale FLUXFILES_STORAGE_BACKEND=db — metadati, indice di ricerca/cartelle e log di audit vivono nel tuo database MySQL/PostgreSQL/SQLite invece che in file JSON. I byte dei file restano comunque nello storage.
Operazioni in blocco
Selezione multipla: spostare, copiare, eliminare, scaricare.
Trasferimento cross-disk
Copia/sposta tra Locale ↔ S3 ↔ R2.
Cestino
Eliminazione recuperabile con pulizia automatica.
Metadati SEO
Titolo, alt, didascalia, tag — metadati oggetto S3 (cloud) o JSON sidecar (locale). Ricerca full-text.
Modalità scura
Chiaro / scuro / auto in UI e SDK.
16 lingue
Inglese predefinito. Imposta locale via SDK, URL (?locale=) o FLUXFILES_LOCALE. RTL per arabo.
Log di audit
Tutte le azioni di scrittura registrate.
Limitazione della velocità
Token bucket per utente per la protezione API.
Quota di archiviazione
Limiti per utente tramite JWT claims.
Bucket BYOB
Gli utenti portano il proprio S3/R2 — credenziali criptate nel JWT (AES-256-GCM).
Rilevamento duplicati
Match SHA-256 salta upload ridondanti salvo sovrascrittura forzata.
Refresh token SDK
onTokenRefresh su 401 — refresh coalescente, retry e updateToken().
Bucket Doctor
Diagnostica qualsiasi disco S3/R2 — credenziali, lettura/scrittura/eliminazione, presign, CORS, multipart — con correzioni IAM e CORS pronte da incollare. Onboarding dei bucket BYOB in pochi minuti.
Disco SFTP
Un 3° driver dopo S3/R2 — trasforma qualsiasi VPS o hosting in file manager.
Editor codice / config
Modifica file di testo e config (wp-config.php, .env) nel browser, stile cPanel.
Zip ed Estrai
Scarica una selezione come zip o estrai un archivio — protetto da zip-slip e bombe.
Filigrana
Applica una filigrana testo o logo al volo per la protezione — l'originale resta intatto.
WebP + AVIF on-demand
Servi qualsiasi dimensione d'immagine come AVIF/WebP in cache tramite un solo URL (negoziato da Accept), con srcset responsive pronto.
Permessi SFTP
Cambia i permessi Unix (chmod) sui dischi SFTP con un dialogo stile cPanel.
Terminale SSH
Un terminale di esecuzione comandi stateless sui dischi SFTP — strumento di amministrazione in stile cPanel, incluso e gratuito (oppure integra il tuo ttyd per un PTY completo).
Deploy Git con un clic
Fai pull e reset di un repo Git sul tuo server SFTP direttamente dal file manager — forma fissa, non una shell arbitraria, hook disattivati di default.
Dashboard di utilizzo
Vedi lo storage a colpo d'occhio — quota e suddivisione per tipo e cartella.
Anteprima media
Anteprima inline di immagini, video, audio e PDF; media locali privati in streaming sicuro.
Pronto in 2 minuti
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= Funziona con
Integrazioni
Adattatori pronti all'uso per il tuo stack
Gli adattatori ufficiali integrano FluxFiles in modo nativo nei framework e negli editor che usi già.
Incorpora
Incorporalo in poche righe
Carica fluxfiles.js, passa un JWT generato lato server e inserisci un file manager completo — o una finestra di selezione file — in qualsiasi pagina.
<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)}
/>
);
} I token vengono generati lato server — non inviare mai il tuo secret al browser.
Progettato per ciò che gli altri hanno dimenticato
| Funzionalità | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Locale + SFTP | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| Integra in qualsiasi framework | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| Auth JWT + scoping | ✓ | ✗ | ✗ | ✗ | ✗ |
| Metadati SEO | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI auto-tag | ✓ | ✗ | ✗ | ✗ | ✗ |
| Ritaglio immagine | ✓ | ✓ | ✗ | ✗ | ✗ |
| Upload a blocchi | ✓ | ✗ | ✗ | ✗ | ✗ |
| Ricerca full-text | ✓ | ✗ | ✗ | ✗ | ✗ |
| Modalità scura | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 lingue | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| Mantenuto attivamente | ✓ | ✓ | ⚠ | ✗ | ✗ |
| UI moderna | ✓ | ✗ | ⚠ | ✗ | ✗ |
| Capacità | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| Self-hosted (gira nella tua infrastruttura) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — bucket proprio di ogni cliente | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| UI file manager incorporabile | ✓ | ✓ | ✓ | ⚠ | ✗ |
| Open source (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| Nessun costo SaaS per storage / per upload | ✓ | ✗ | ✗ | ✗ | ⚠ |
| Multi-storage (S3 / R2 / locale) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| Scoping del token per tenant integrato | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
Il confronto riflette le offerte predefinite tipiche; ogni prodotto eccelle nel proprio ambito. La nicchia di FluxFiles è la combinazione incorporabile, self-hosted e bring-your-own-bucket.
Confronto aggiornato al September 2026, indipendente — consulta il repository GitHub per segnalare una correzione.
FAQ