File Manager

TsgcHTMLComponent_FileManager: een server-side gerenderde bestandsbeheerder voor webportalen. Gebruikers bladeren door mappen, bekijken voorbeelden, uploaden, downloaden en organiseren bestanden, en de server controleert elk verzoek tegen de rechten, de bestandsregels en je eigen rolcontroles voordat hij de opslag aanraakt, in Delphi, C++ Builder en .NET.

TsgcHTMLComponent_FileManager

Stel RootFolder in of wijs een Provider toe, verleen de operaties in Permissions en render hem. Elke klik verstuurt een stateless serverevent, elke download of voorbeeldweergave is een ondertekende link, en OnBeforeOperation kan nog steeds een enkele operatie weigeren.

Componentklasse

TsgcHTMLComponent_FileManager, met TsgcHTMLFileManagerProvider voor de opslag waarop hij werkt

Rendert

Een werkbalk, een mappenboom, een broodkruimelpad, een lijst met details of miniaturen, een detailvenster met voorbeeld, een statusbalk, een contextmenu en een uploadpaneel, in Bootstrap 5 met ingebedde Bootstrap Icons en zonder CDN

Talen

Delphi, C++ Builder, .NET

Wijs naar een map, verleen de operaties, controleer de rollen

Permissions staat standaard alleen downloads toe, verleen dus wat je gebruikers mogen doen. OnBeforeOperation draait na de ingebouwde controles en vóór de opslag, met de operatie, de paden en de sessie van het verzoek.

uses
  sgcHTML_Component_FileManager;

// Eenmalig gemaakt: het beantwoordt zijn eigen serverevents en bestandslinks
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;

// Rollen per gebruiker: aArgs.Session is nil als anoniem
procedure TForm1.FileManagerBeforeOperation(Sender: TObject;
  const aOperation: TsgcHTMLFileManagerOperation;
  const aArgs: TsgcHTMLFileManagerOperationArgs; var aAccept: Boolean;
  var aErrorMessage: string);
begin
  // viewers en anonieme gebruikers lezen alleen
  if (aArgs.Session = nil) or not (aArgs.Session.HasRole('admin') or
    aArgs.Session.HasRole('editor')) then
    aAccept := aOperation in [fmoList, fmoSearch, fmoDownload, fmoPreview]
  // editors verwijderen nooit
  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: één bestandsbeheerder per engine en naam *@
@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;

// Elke gebruiker krijgt de rechten van zijn rol
public void GetPermissions(object sender, TsgcHTMLFileManagerOperationArgs args,
    ref TsgcHTMLFileManagerPermissions permissions)
{
    if (args.Session != null && args.Session.Roles.Contains("admin"))
        permissions |= TsgcHTMLFileManagerPermissions.fmpDelete;
}

Wat je gebruikers krijgen

De bestandsbeheerder die ze van de desktop kennen, in de browser, met elke operatie gecontroleerd door je server.

Twee weergaven en een mappenboom

Een detailweergave met sorteerbare kolommen (naam, grootte, gewijzigd, type) en een miniaturenweergave met afbeeldingsvoorbeelden. De mappenboom laadt op aanvraag, met het toetsenbord en de rollen van TreeView, naast een broodkruimelpad, een weergaveschakelaar, vernieuwen en een statusbalk.

Zoeken

Het zoekvak filtert de huidige map, en Enter doorzoekt de submappen op de server. De treffers verschijnen met een mapkolom, tot MaxSearchResults items.

Voorbeeld

Het detailvenster toont voorbeelden van afbeeldingen, PDF-bestanden met de ingebedde pdf.js van PDFViewer en tekstbestanden, met de eigenschappen van het item, een knop Openen of Downloaden en eigen HTML uit OnItemDetails.

Bestanden organiseren

Nieuwe map, uploaden, downloaden, naam wijzigen, verwijderen, knippen, kopiëren en plakken, elk alleen wanneer verleend. Sleep items naar een map van de lijst, van de boom of van het broodkruimelpad om ze te verplaatsen, met Ctrl of Alt om ze te kopiëren, of met Shift om Hierheen verplaatsen of Hierheen kopiëren te kiezen. Meerdere geselecteerde bestanden worden na elkaar gedownload.

Uploads in delen

Uploads in delen en hervatbare uploads met het protocol van TsgcHTMLComponent_FileUpload: een uploadknop, bestanden die vanaf het bureaublad op een overlay worden gesleept en een uploadpaneel met de voortgang van elk bestand. Een naam die al bestaat wordt name (2).ext.

Contextmenu

Rechtsklikken, Shift+F10 of de Menu-toets openen een contextmenu met dezelfde opdrachten en je CustomCommands, die tot sommige bestandstypen beperkt kunnen worden.

Responsief en toegankelijk

Onder 768 pixels wordt de boom een offcanvas-paneel en zakt het detailvenster onder de lijst. Donkere modus via de Bootstrap-variabelen, rechts-naar-links-indelingen, ARIA-rollen en een beleefd live-gebied.

17 talen

Elke tekst van de bestandsbeheerder komt uit de locale van de bibliotheek, sgcHTMLDefaultLocale, in 17 talen, en een mislukte operatie toont de gelokaliseerde tekst van zijn fout.

Belangrijkste eigenschappen, methoden en gebeurtenissen

De leden die je het vaakst gebruikt.

Rechten en rollen

Permissions bepaalt de operaties die de gebruiker mag uitvoeren, standaard alleen fmpDownload. OnGetPermissions geeft elke gebruiker, of elk verzoek, de rechten van zijn rol, en OnBeforeOperation kan nog steeds een enkele operatie weigeren, bijvoorbeeld per map. Een geweigerde operatie toont aErrorMessage in een toast.

Standaard veilig

Elk verzoek wordt op de server opnieuw gevalideerd: de paden, de namen, de Permissions, AllowedExtensions, MaxFileSize en verborgen bestanden (ShowHiddenFiles). Een ongeldig verzoek, zoals een onbekende operatie of meer dan 1000 items, wordt beantwoord met status 400.

Downloads, voorbeelden en miniaturen zijn GET-verzoeken van links die GetFileURL ondertekent met HMAC-SHA256 en bindt aan het pad, de sessie en een vervaltijd (TokenLifetime, standaard 300 seconden). De engine streamt het bestand vanuit de provider en laadt het nooit in zijn geheel in het geheugen.

GetShareURL schrijft een ondertekende downloadlink die niet aan een sessie is gebonden, zodat mensen zonder account het bestand kunnen downloaden tot de link verloopt.

Elke opslag

De ingebouwde provider toont een map van het lokale bestandssysteem, RootFolder. Een database, een cloudopslag of een archief is een afstammeling van TsgcHTMLFileManagerProvider die aan Provider wordt toegewezen. Elk pad dat een provider ontvangt is relatief, gescheiden door / en al gevalideerd.

Eigen opdrachten

CustomCommands voegen eigen acties toe aan de werkbalk, het contextmenu of beide, zoals ondertekenen, delen of converteren, ook alleen voor bepaalde bestandstypen. OnCommand beantwoordt ze.

Audit en live synchronisatie

OnAfterOperation wordt geactiveerd na elke geslaagde operatie, om een audittrail te voeden, en OnError wanneer een operatie mislukt. Met LiveSync ververst elke browser die een map toont zichzelf wanneer een andere gebruiker de map wijzigt.

Stateless serverevent

Elke actie verstuurt het serverevent fm met zijn CSRF-header naar het componenteventeindpunt van de HTMX-engine, of naar ActionURL. Het component houdt tussen verzoeken geen status bij: het valideert het verzoek, voert het uit via Execute en antwoordt met fragmenten gemarkeerd met hx-swap-oob="true".

ASP.NET Core

In een Razor-view rendert de Tag Helper <sgc-file-manager name="..."> de bestandsbeheerder. De eerste render maakt één component per engine en naam, geregistreerd bij de engine van AddSgcHtml, en elke render stelt zijn eigenschappen opnieuw in vanuit de attributen. CustomCommands, TokenSecret en Provider vereisen het in code gemaakte component.

De demo

Demos\60.HTML\01.RunTime\28.FileManager is het sgc Document Portal op poort 8130. Drie gebruikers wisselen in de kop, Alice (admin), Ben (editor) en Carla (viewer), met de rollen toegepast in OnBeforeOperation. LiveSync, een activiteitenfeed, aanwezigheidsavatars en een opslaggrafiek werken bij als bestanden veranderen, een opdracht Ondertekenen ondertekent een PDF met een SignaturePad, en een opdracht Deellink toont een ondertekende link. De designtime-, Lazarus- en .NET-versies spiegelen het.

Blijf verkennen

Online proberenBekijk het in de demo Bestandsbeheer, live draaiend op de eSeGeCe-demoserver.
Online helpVolledige API-referentie en gebruikshandleiding voor dit component.
FileUpload-componentHet protocol voor uploads in delen en hervatbare uploads dat de bestandsbeheerder gebruikt.
PDFViewer-componentDe ingebedde pdf.js-viewer achter het PDF-voorbeeld.
Alle sgcHTML-componentenBlader door de volledige functiematrix van 80+ componenten.
Download gratis proefversieDe proefversie van 30 dagen bevat de 60.HTML-demoprojecten.
PrijzenSingle-, Team- en Site-licenties met volledige broncode.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om te beginnen?

Download de gratis proefversie en begin met het bouwen van web-UI's in Delphi, C++ Builder en .NET.