File Manager

TsgcHTMLComponent_FileManager: renderowany na serwerze menedżer plików dla portali webowych. Użytkownicy przeglądają foldery, podglądają, przesyłają, pobierają i porządkują pliki, a serwer waliduje każde żądanie względem uprawnień, reguł plików i Twoich kontroli ról, zanim dotknie magazynu, w Delphi, C++ Builder i .NET.

TsgcHTMLComponent_FileManager

Ustaw RootFolder albo przypisz Provider, nadaj operacje w Permissions i wyrenderuj komponent. Każde kliknięcie wysyła bezstanowe zdarzenie serwera, każde pobranie lub podgląd to podpisane łącze, a OnBeforeOperation może nadal odrzucić pojedynczą operację.

Klasa komponentu

TsgcHTMLComponent_FileManager, z TsgcHTMLFileManagerProvider dla magazynu, na którym pracuje

Renderuje

Pasek narzędzi, drzewo folderów, ścieżka nawigacji, lista szczegółów lub miniatur, panel szczegółów z podglądem, pasek stanu, menu kontekstowe i panel przesyłania, w Bootstrap 5 z wbudowanymi Bootstrap Icons i bez CDN

Języki

Delphi, C++ Builder, .NET

Wskaż folder, nadaj operacje, sprawdź role

Permissions domyślnie zezwala tylko na pobieranie, więc nadaj to, co mogą robić Twoi użytkownicy. OnBeforeOperation uruchamia się po wbudowanych kontrolach i przed magazynem, z operacją, ścieżkami i sesją żądania.

uses
  sgcHTML_Component_FileManager;

// Tworzony raz: odpowiada na własne zdarzenia serwera i łącza do plików
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;

// Role użytkowników: aArgs.Session ma wartość nil dla anonimowego
procedure TForm1.FileManagerBeforeOperation(Sender: TObject;
  const aOperation: TsgcHTMLFileManagerOperation;
  const aArgs: TsgcHTMLFileManagerOperationArgs; var aAccept: Boolean;
  var aErrorMessage: string);
begin
  // przeglądający i użytkownicy anonimowi tylko czytają
  if (aArgs.Session = nil) or not (aArgs.Session.HasRole('admin') or
    aArgs.Session.HasRole('editor')) then
    aAccept := aOperation in [fmoList, fmoSearch, fmoDownload, fmoPreview]
  // edytorzy nigdy nie usuwają
  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: jeden menedżer plików na silnik i nazwę *@
@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;

// Każdy użytkownik otrzymuje uprawnienia swojej roli
public void GetPermissions(object sender, TsgcHTMLFileManagerOperationArgs args,
    ref TsgcHTMLFileManagerPermissions permissions)
{
    if (args.Session != null && args.Session.Roles.Contains("admin"))
        permissions |= TsgcHTMLFileManagerPermissions.fmpDelete;
}

Co dostają Twoi użytkownicy

Menedżer plików, który znają już z pulpitu, w przeglądarce, z każdą operacją sprawdzaną przez Twój serwer.

Dwa widoki i drzewo folderów

Widok szczegółów z sortowalnymi kolumnami (nazwa, rozmiar, data modyfikacji, typ) i widok miniatur z podglądami obrazów. Drzewo folderów ładuje się na żądanie, z obsługą klawiatury i rolami TreeView, obok ścieżki nawigacji, przełącznika widoku, odświeżania i paska stanu.

Wyszukiwanie

Pole wyszukiwania filtruje bieżący folder, a Enter przeszukuje podfoldery na serwerze. Wyniki pokazują się z kolumną folderu, do MaxSearchResults elementów.

Podgląd

Panel szczegółów podgląda obrazy, pliki PDF za pomocą wbudowanego pdf.js z PDFViewer oraz pliki tekstowe, z właściwościami elementu, przyciskiem Otwórz lub Pobierz i własnym HTML z OnItemDetails.

Porządkowanie plików

Nowy folder, przesyłanie, pobieranie, zmiana nazwy, usuwanie, wycinanie, kopiowanie i wklejanie, każde tylko wtedy, gdy jest nadane. Przeciągaj elementy na folder listy, drzewa lub ścieżki nawigacji, aby je przenieść, z klawiszem Ctrl lub Alt, aby je skopiować, albo z klawiszem Shift, aby wybrać Przenieś tutaj lub Kopiuj tutaj. Kilka zaznaczonych plików pobiera się jeden po drugim.

Przesyłanie we fragmentach

Przesyłanie we fragmentach z możliwością wznowienia, według protokołu TsgcHTMLComponent_FileUpload: przycisk przesyłania, pliki upuszczone z pulpitu na nakładkę oraz panel przesyłania z postępem każdego pliku. Nazwa, która już istnieje, zamienia się w name (2).ext.

Kliknięcie prawym przyciskiem, Shift+F10 lub klawisz Menu otwierają menu kontekstowe z tymi samymi poleceniami i Twoimi CustomCommands, które można ograniczyć do niektórych typów plików.

Responsywny i dostępny

Poniżej 768 pikseli drzewo staje się panelem offcanvas, a panel szczegółów spada pod listę. Tryb ciemny przez zmienne Bootstrap, układy od prawej do lewej, role ARIA i uprzejmy region na żywo.

17 języków

Każdy tekst menedżera plików pochodzi z ustawień regionalnych biblioteki, sgcHTMLDefaultLocale, w 17 językach, a nieudana operacja pokazuje zlokalizowany tekst swojego błędu.

Kluczowe właściwości, metody i zdarzenia

Składowe, po które sięgasz najczęściej.

Uprawnienia i role

Permissions ustala operacje, które użytkownik może wykonać, domyślnie tylko fmpDownload. OnGetPermissions daje każdemu użytkownikowi, albo każdemu żądaniu, uprawnienia jego roli, a OnBeforeOperation może nadal odrzucić pojedynczą operację, na przykład według folderu. Odrzucona operacja pokazuje aErrorMessage w toaście.

Bezpieczny domyślnie

Każde żądanie jest ponownie walidowane na serwerze: ścieżki, nazwy, Permissions, AllowedExtensions, MaxFileSize i pliki ukryte (ShowHiddenFiles). Nieprawidłowe żądanie, na przykład z nieznaną operacją lub z ponad 1000 elementów, kończy się statusem 400.

Podpisane łącza

Pobrania, podglądy i miniatury to żądania GET łączy podpisanych HMAC-SHA256 przez GetFileURL, powiązanych ze ścieżką, sesją i czasem ważności (TokenLifetime, domyślnie 300 sekund). Silnik przesyła plik strumieniowo od dostawcy i nigdy nie wczytuje go w całości do pamięci.

Łącza udostępniania

GetShareURL zapisuje podpisane łącze pobierania niepowiązane z sesją, więc osoby bez konta mogą pobrać plik do wygaśnięcia łącza.

Dowolny magazyn

Wbudowany dostawca pokazuje folder lokalnego systemu plików, RootFolder. Baza danych, magazyn w chmurze lub archiwum to potomek TsgcHTMLFileManagerProvider przypisany do Provider. Każda ścieżka, którą otrzymuje dostawca, jest względna, rozdzielona znakiem / i już zwalidowana.

Własne polecenia

CustomCommands dodają własne akcje, takie jak podpisz, udostępnij lub konwertuj, do paska narzędzi, menu kontekstowego lub obu, także tylko dla niektórych typów plików. Odpowiada na nie OnCommand.

Audyt i synchronizacja na żywo

OnAfterOperation uruchamia się po każdej udanej operacji, aby zasilić ślad audytu, a OnError gdy operacja się nie powiedzie. Z LiveSync każda przeglądarka, która pokazuje folder, odświeża się sama, gdy zmieni go inny użytkownik.

Bezstanowe zdarzenie serwera

Każda akcja wysyła zdarzenie serwera fm do punktu końcowego zdarzeń komponentów silnika HTMX, z nagłówkiem CSRF, albo do ActionURL. Komponent nie przechowuje stanu między żądaniami: waliduje żądanie, wykonuje je przez Execute i odpowiada fragmentami oznaczonymi hx-swap-oob="true".

ASP.NET Core

W widoku Razor Tag Helper <sgc-file-manager name="..."> renderuje menedżer plików. Pierwsze renderowanie tworzy jeden komponent na silnik i nazwę, zarejestrowany w silniku z AddSgcHtml, a każde renderowanie ponownie ustawia jego właściwości z atrybutów. CustomCommands, TokenSecret i Provider wymagają komponentu utworzonego w kodzie.

Demo

Demos\60.HTML\01.RunTime\28.FileManager to sgc Document Portal na porcie 8130. Trzech użytkowników przełącza się w nagłówku: Alice (admin), Ben (edytor) i Carla (przeglądająca), z rolami stosowanymi w OnBeforeOperation. LiveSync, strumień aktywności, awatary obecności i wykres magazynu aktualizują się wraz ze zmianą plików, polecenie Sign podpisuje PDF za pomocą SignaturePad, a polecenie Share link pokazuje podpisane łącze. Wersje design time, Lazarus i .NET są jego odpowiednikami.

Odkrywaj dalej

Wypróbuj onlineZobacz to w demie Menedżer plików, działającym na żywo na serwerze demo eSeGeCe.
Pomoc onlinePełna dokumentacja API i przewodnik użytkowania tego komponentu.
Komponent FileUploadProtokół przesyłania we fragmentach z możliwością wznowienia, którego używa menedżer plików.
Komponent PDFViewerWbudowany przeglądarka pdf.js stojąca za podglądem PDF.
Wszystkie komponenty sgcHTMLPrzejrzyj pełną matrycę funkcji 80+ komponentów.
Pobierz bezpłatną wersję próbną30-dniowa wersja próbna zawiera projekty demonstracyjne 60.HTML.
CennikLicencje Single, Team i Site z pełnym kodem źródłowym.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, aby zacząć?

Pobierz bezpłatną wersję próbną i zacznij budować interfejsy webowe w Delphi, C++ Builder i .NET.