File Manager

TsgcHTMLComponent_FileManager: un file manager renderizzato sul server per portali web. Gli utenti sfogliano le cartelle, visualizzano in anteprima, caricano, scaricano e organizzano file, e il server valida ogni richiesta rispetto ai permessi, alle regole sui file e ai tuoi controlli sui ruoli prima di toccare l'archivio, in Delphi, C++ Builder e .NET.

TsgcHTMLComponent_FileManager

Imposta RootFolder oppure assegna un Provider, concedi le operazioni in Permissions e visualizzalo. Ogni clic invia un evento server senza stato, ogni download o anteprima è un link firmato e OnBeforeOperation può ancora rifiutare una singola operazione.

Classe del componente

TsgcHTMLComponent_FileManager, con TsgcHTMLFileManagerProvider per l'archivio su cui lavora

Rendering

Una barra degli strumenti, un albero delle cartelle, un breadcrumb, un elenco di dettagli o miniature, un pannello dei dettagli con anteprima, una barra di stato, un menu contestuale e un pannello di caricamento, in Bootstrap 5 con Bootstrap Icons incorporate e senza CDN

Famiglia

Moduli e Input

Linguaggi

Delphi, C++ Builder, .NET

Puntalo a una cartella, concedi le operazioni, controlla i ruoli

Permissions consente solo i download di default, quindi concedi ciò che i tuoi utenti possono fare. OnBeforeOperation viene eseguito dopo i controlli integrati e prima dell'archivio, con l'operazione, i percorsi e la sessione della richiesta.

uses
  sgcHTML_Component_FileManager;

// Creato una sola volta: risponde ai propri eventi server e ai link dei file
oFM := TsgcHTMLComponent_FileManager.Create(Self);
oFM.Name := 'fmDocs';
oFM.RootFolder := 'C:\Portal\Documents';
oFM.RootCaption := 'Documents';
oFM.Permissions := [fmpCreateFolder, fmpUpload, fmpDownload, fmpRename,
  fmpMove, fmpCopy];
oFM.AllowedExtensions := '.pdf;.docx;.xlsx;.png;.jpg;.txt';
oFM.MaxFileSize := 20 * 1024 * 1024;
oFM.HTMXEngine := HTMXEngine1;
oFM.OnBeforeOperation := FileManagerBeforeOperation;
Result := oFM.HTML;

// Ruoli per utente: aArgs.Session è nil se anonimo
procedure TForm1.FileManagerBeforeOperation(Sender: TObject;
  const aOperation: TsgcHTMLFileManagerOperation;
  const aArgs: TsgcHTMLFileManagerOperationArgs; var aAccept: Boolean;
  var aErrorMessage: string);
begin
  // i lettori e gli utenti anonimi possono solo leggere
  if (aArgs.Session = nil) or not (aArgs.Session.HasRole('admin') or
    aArgs.Session.HasRole('editor')) then
    aAccept := aOperation in [fmoList, fmoSearch, fmoDownload, fmoPreview]
  // gli editor non eliminano mai
  else if not aArgs.Session.HasRole('admin') then
    aAccept := aOperation <> fmoDelete;
  if not aAccept then
    aErrorMessage := 'Your role does not allow this operation.';
end;
@* Pages/Documents.cshtml: un file manager per motore e nome *@
@model DocumentsModel

<sgc-file-manager name="fmDocs" root-folder="C:\Portal\Documents" root-caption="Documents"
                  permissions="createfolder,upload,download,rename,move,copy"
                  allowed-extensions=".pdf;.docx;.xlsx;.png;.jpg;.txt" max-file-size="20971520"
                  live-sync="true" on-get-permissions="Model.GetPermissions"
                  on-before-operation="Model.CheckAccess" on-after-operation="Model.Audit" />
using esegece.sgcWebSockets;

var fm = new TsgcHTMLComponent_FileManager();
fm.Name = "fmDocs";
fm.RootFolder = @"C:\Portal\Documents";
fm.RootCaption = "Documents";
fm.Permissions = TsgcHTMLFileManagerPermissions.fmpCreateFolder |
    TsgcHTMLFileManagerPermissions.fmpUpload | TsgcHTMLFileManagerPermissions.fmpDownload |
    TsgcHTMLFileManagerPermissions.fmpRename | TsgcHTMLFileManagerPermissions.fmpMove |
    TsgcHTMLFileManagerPermissions.fmpCopy;
fm.AllowedExtensions = ".pdf;.docx;.xlsx;.png;.jpg;.txt";
fm.MaxFileSize = 20L * 1024 * 1024;
fm.HTMXEngine = htmxEngine;
fm.OnGetPermissions += GetPermissions;
string html = fm.HTML;

// Ogni utente riceve i permessi del proprio ruolo
public void GetPermissions(object sender, TsgcHTMLFileManagerOperationArgs args,
    ref TsgcHTMLFileManagerPermissions permissions)
{
    if (args.Session != null && args.Session.Roles.Contains("admin"))
        permissions |= TsgcHTMLFileManagerPermissions.fmpDelete;
}

Cosa ottengono i tuoi utenti

Il file manager che già conoscono dal desktop, nel browser, con ogni operazione verificata dal tuo server.

Due viste e un albero delle cartelle

Una vista dettagli con colonne ordinabili (nome, dimensione, modificato, tipo) e una vista miniature con anteprime delle immagini. L'albero delle cartelle si carica su richiesta, con la tastiera e i ruoli di TreeView, accanto a un breadcrumb, un selettore di vista, aggiorna e una barra di stato.

Ricerca

La casella di ricerca filtra la cartella corrente, e Invio cerca nelle sottocartelle sul server. Le corrispondenze compaiono con una colonna della cartella, fino a MaxSearchResults elementi.

Anteprima

Il pannello dei dettagli mostra l'anteprima di immagini, file PDF con il pdf.js incorporato di PDFViewer e file di testo, con le proprietà dell'elemento, un pulsante Apri o Scarica e HTML personalizzato da OnItemDetails.

Organizzare i file

Nuova cartella, carica, scarica, rinomina, elimina, taglia, copia e incolla, ognuna solo se concessa. Trascina gli elementi su una cartella dell'elenco, dell'albero o del breadcrumb per spostarli, con Ctrl o Alt per copiarli, o con Maiusc per scegliere Sposta qui o Copia qui. Più file selezionati si scaricano uno dopo l'altro.

Caricamenti a blocchi

Caricamenti a blocchi e riprendibili con il protocollo di TsgcHTMLComponent_FileUpload: un pulsante di caricamento, file trascinati dal desktop su un overlay e un pannello di caricamento con l'avanzamento di ogni file. Un nome già esistente diventa name (2).ext.

Clic destro, Maiusc+F10 o il tasto Menu aprono un menu contestuale con gli stessi comandi e i tuoi CustomCommands, che possono essere limitati ad alcuni tipi di file.

Responsivo e accessibile

Sotto i 768 pixel l'albero diventa un pannello offcanvas e il pannello dei dettagli scende sotto l'elenco. Modalità scura tramite le variabili Bootstrap, layout da destra a sinistra, ruoli ARIA e una regione live cortese.

17 lingue

Ogni testo del file manager proviene dalla localizzazione della libreria, sgcHTMLDefaultLocale, in 17 lingue, e un'operazione non riuscita mostra il testo localizzato del suo errore.

Proprietà, metodi ed eventi principali

I membri che usi più spesso.

Permessi e ruoli

Permissions imposta le operazioni che l'utente può eseguire, solo fmpDownload di default. OnGetPermissions assegna a ogni utente, o a ogni richiesta, i permessi del proprio ruolo, e OnBeforeOperation può ancora rifiutare una singola operazione, per esempio per cartella. Un'operazione rifiutata mostra aErrorMessage in un toast.

Sicuro di default

Ogni richiesta viene validata di nuovo sul server: i percorsi, i nomi, Permissions, AllowedExtensions, MaxFileSize e i file nascosti (ShowHiddenFiles). Una richiesta malformata, come un'operazione sconosciuta o più di 1000 elementi, risponde con lo stato 400.

Download, anteprime e miniature sono richieste GET di link firmati con HMAC-SHA256 da GetFileURL, legati al percorso, alla sessione e a una scadenza (TokenLifetime, 300 secondi di default). Il motore trasmette il file dal provider e non lo carica mai per intero in memoria.

GetShareURL scrive un link di download firmato che non è legato a una sessione, così chi non ha un account può scaricare il file finché il link non scade.

Qualsiasi archivio

Il provider integrato mostra una cartella del file system locale, RootFolder. Un database, un archivio cloud o un archivio compresso è un discendente di TsgcHTMLFileManagerProvider assegnato a Provider. Ogni percorso che un provider riceve è relativo, separato da / e già validato.

Comandi personalizzati

CustomCommands aggiunge azioni proprie, come firmare, condividere o convertire, alla barra degli strumenti, al menu contestuale o a entrambi, anche solo per alcuni tipi di file. OnCommand le gestisce.

Audit e sincronizzazione live

OnAfterOperation scatta dopo ogni operazione riuscita, per alimentare un registro di audit, e OnError quando un'operazione fallisce. Con LiveSync, ogni browser che mostra una cartella si aggiorna quando un altro utente la modifica.

Evento server senza stato

Ogni azione invia l'evento server fm all'endpoint degli eventi dei componenti del motore HTMX, con la sua intestazione CSRF, oppure a ActionURL. Il componente non conserva stato tra le richieste: valida la richiesta, la esegue con Execute e risponde con frammenti marcati con hx-swap-oob="true".

ASP.NET Core

In una vista Razor, il Tag Helper <sgc-file-manager name="..."> renderizza il file manager. Il primo rendering crea un componente per motore e nome, registrato nel motore di AddSgcHtml, e ogni rendering reimposta le sue proprietà dagli attributi. CustomCommands, TokenSecret e Provider richiedono il componente creato nel codice.

La demo

Demos\60.HTML\01.RunTime\28.FileManager è il sgc Document Portal sulla porta 8130. Tre utenti si alternano nell'intestazione, Alice (admin), Ben (editor) e Carla (viewer), con i ruoli applicati in OnBeforeOperation. LiveSync, un feed di attività, avatar di presenza e un grafico dell'archiviazione si aggiornano al variare dei file, un comando Firma firma un PDF con un SignaturePad e un comando Link di condivisione mostra un link firmato. Le versioni design time, Lazarus e .NET lo replicano.

Continua a esplorare

Provalo onlineGuardalo nella demo Gestore file, in esecuzione dal vivo sul server demo di eSeGeCe.
Guida in lineaRiferimento API completo e guida all'uso di questo componente.
Componente FileUploadIl protocollo di caricamento a blocchi e riprendibile che usa il file manager.
Componente PDFViewerIl visualizzatore pdf.js incorporato dietro l'anteprima PDF.
Tutti i componenti sgcHTMLEsplora la matrice completa delle funzionalità di oltre 80 componenti.
Scarica la Prova GratuitaLa prova di 30 giorni include i progetti demo 60.HTML.
PrezziLicenze Single, Team e Site con codice sorgente completo.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto a Iniziare?

Scarica la versione di prova gratuita e inizia a creare interfacce web in Delphi, C++ Builder e .NET.