File Manager

TsgcHTMLComponent_FileManager: un administrador de archivos renderizado en el servidor para portales web. Los usuarios exploran carpetas, previsualizan, suben, descargan y organizan archivos, y el servidor valida cada petición con los permisos, las reglas de archivo y tus propias comprobaciones de roles antes de tocar el almacenamiento, en Delphi, C++ Builder y .NET.

TsgcHTMLComponent_FileManager

Define RootFolder o asigna un Provider, concede las operaciones en Permissions y renderízalo. Cada clic envía un evento de servidor sin estado, cada descarga o vista previa es un enlace firmado, y OnBeforeOperation aún puede rechazar una operación concreta.

Clase del componente

TsgcHTMLComponent_FileManager, con TsgcHTMLFileManagerProvider para el almacenamiento sobre el que trabaja

Renderiza

Una barra de herramientas, un árbol de carpetas, una ruta de navegación, una lista de detalles o miniaturas, un panel de detalles con vista previa, una barra de estado, un menú contextual y un panel de subida, en Bootstrap 5 con Bootstrap Icons incrustados y sin CDN

Lenguajes

Delphi, C++ Builder, .NET

Apúntalo a una carpeta, concede las operaciones, comprueba los roles

Permissions solo permite descargas por defecto, así que concede lo que tus usuarios pueden hacer. OnBeforeOperation se ejecuta tras las comprobaciones integradas y antes del almacenamiento, con la operación, las rutas y la sesión de la petición.

uses
  sgcHTML_Component_FileManager;

// Se crea una sola vez: responde a sus propios eventos de servidor y enlaces de archivos
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;

// Roles por usuario: aArgs.Session es nil si es anónimo
procedure TForm1.FileManagerBeforeOperation(Sender: TObject;
  const aOperation: TsgcHTMLFileManagerOperation;
  const aArgs: TsgcHTMLFileManagerOperationArgs; var aAccept: Boolean;
  var aErrorMessage: string);
begin
  // los lectores y los usuarios anónimos solo leen
  if (aArgs.Session = nil) or not (aArgs.Session.HasRole('admin') or
    aArgs.Session.HasRole('editor')) then
    aAccept := aOperation in [fmoList, fmoSearch, fmoDownload, fmoPreview]
  // los editores nunca eliminan
  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 administrador de archivos por motor y nombre *@
@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;

// Cada usuario recibe los permisos de su rol
public void GetPermissions(object sender, TsgcHTMLFileManagerOperationArgs args,
    ref TsgcHTMLFileManagerPermissions permissions)
{
    if (args.Session != null && args.Session.Roles.Contains("admin"))
        permissions |= TsgcHTMLFileManagerPermissions.fmpDelete;
}

Lo que obtienen tus usuarios

El administrador de archivos que ya conocen del escritorio, en el navegador, con cada operación comprobada por tu servidor.

Dos vistas y un árbol de carpetas

Una vista de detalles con columnas ordenables (nombre, tamaño, modificado, tipo) y una vista de miniaturas con vistas previas de imágenes. El árbol de carpetas se carga bajo demanda, con el teclado y los roles de TreeView, junto a una ruta de navegación, un selector de vista, actualizar y una barra de estado.

Búsqueda

El cuadro de búsqueda filtra la carpeta actual, e Intro busca en las subcarpetas en el servidor. Las coincidencias se muestran con una columna de carpeta, hasta MaxSearchResults elementos.

Vista previa

El panel de detalles previsualiza imágenes, archivos PDF con el pdf.js incrustado de PDFViewer y archivos de texto, con las propiedades del elemento, un botón Abrir o Descargar y HTML propio desde OnItemDetails.

Organizar archivos

Nueva carpeta, subir, descargar, cambiar nombre, eliminar, cortar, copiar y pegar, cada una solo cuando se concede. Arrastra elementos a una carpeta de la lista, del árbol o de la ruta de navegación para moverlos, con Ctrl o Alt para copiarlos, o con Mayús para elegir Mover aquí o Copiar aquí. Varios archivos seleccionados se descargan uno tras otro.

Subidas por fragmentos

Subidas por fragmentos y reanudables con el protocolo de TsgcHTMLComponent_FileUpload: un botón de subida, archivos soltados desde el escritorio sobre una superposición y un panel de subida con el progreso de cada archivo. Un nombre que ya existe se convierte en name (2).ext.

Menú contextual

Clic derecho, Mayús+F10 o la tecla Menú abren un menú contextual con los mismos comandos y tus CustomCommands, que pueden limitarse a algunos tipos de archivo.

Adaptable y accesible

Por debajo de 768 píxeles el árbol se convierte en un panel offcanvas y el panel de detalles pasa debajo de la lista. Modo oscuro mediante las variables de Bootstrap, diseños de derecha a izquierda, roles ARIA y una región live cortés.

17 idiomas

Cada texto del administrador de archivos procede de la configuración regional de la biblioteca, sgcHTMLDefaultLocale, en 17 idiomas, y una operación fallida muestra el texto localizado de su error.

Propiedades, métodos y eventos clave

Los miembros que más vas a usar.

Permisos y roles

Permissions define las operaciones que el usuario puede ejecutar, solo fmpDownload por defecto. OnGetPermissions da a cada usuario, o a cada petición, los permisos de su rol, y OnBeforeOperation aún puede rechazar una operación concreta, por ejemplo por carpeta. Una operación rechazada muestra aErrorMessage en un toast.

Seguro por defecto

Cada petición se valida de nuevo en el servidor: las rutas, los nombres, Permissions, AllowedExtensions, MaxFileSize y los archivos ocultos (ShowHiddenFiles). Una petición mal formada, como una operación desconocida o más de 1000 elementos, responde con el estado 400.

Enlaces firmados

Las descargas, las vistas previas y las miniaturas son peticiones GET de enlaces firmados con HMAC-SHA256 por GetFileURL, vinculados a la ruta, la sesión y una caducidad (TokenLifetime, 300 segundos por defecto). El motor transmite el archivo desde el proveedor y nunca lo carga entero en memoria.

Enlaces para compartir

GetShareURL escribe un enlace de descarga firmado que no está vinculado a una sesión, de modo que personas sin cuenta pueden descargar el archivo hasta que el enlace caduca.

Cualquier almacenamiento

El proveedor integrado muestra una carpeta del sistema de archivos local, RootFolder. Una base de datos, un almacén en la nube o un archivo comprimido es un descendiente de TsgcHTMLFileManagerProvider asignado a Provider. Cada ruta que recibe un proveedor es relativa, separada por / y ya validada.

Comandos personalizados

CustomCommands añade acciones propias, como firmar, compartir o convertir, a la barra de herramientas, al menú contextual o a ambos, también solo para algunos tipos de archivo. OnCommand las responde.

Auditoría y sincronización en vivo

OnAfterOperation se dispara tras cada operación correcta, para alimentar un registro de auditoría, y OnError cuando una operación falla. Con LiveSync, cada navegador que muestra una carpeta se actualiza cuando otro usuario la cambia.

Evento de servidor sin estado

Cada acción envía el evento de servidor fm al endpoint de eventos de componentes del motor HTMX, con su cabecera CSRF, o a ActionURL. El componente no guarda estado entre peticiones: valida la petición, la ejecuta con Execute y responde con fragmentos marcados con hx-swap-oob="true".

ASP.NET Core

En una vista Razor, el Tag Helper <sgc-file-manager name="..."> renderiza el administrador de archivos. El primer renderizado crea un componente por motor y nombre, registrado en el motor de AddSgcHtml, y cada renderizado vuelve a definir sus propiedades a partir de los atributos. CustomCommands, TokenSecret y Provider necesitan el componente creado en código.

La demo

Demos\60.HTML\01.RunTime\28.FileManager es el sgc Document Portal en el puerto 8130. Tres usuarios se alternan en la cabecera, Alice (admin), Ben (editor) y Carla (lector), con los roles aplicados en OnBeforeOperation. LiveSync, un feed de actividad, avatares de presencia y un gráfico de almacenamiento se actualizan según cambian los archivos, un comando Firmar firma un PDF con un SignaturePad y un comando Enlace para compartir muestra un enlace firmado. Las versiones de tiempo de diseño, Lazarus y .NET lo replican.

Sigue explorando

Pruébalo en líneaMíralo en la demo Gestor de archivos, funcionando en vivo en el servidor de demos de eSeGeCe.
Ayuda en líneaReferencia completa de la API y guía de uso para este componente.
Componente FileUploadEl protocolo de subida por fragmentos y reanudable que usa el administrador de archivos.
Componente PDFViewerEl visor pdf.js incrustado detrás de la vista previa de PDF.
Todos los componentes de sgcHTMLExplora la matriz de características completa de más de 80 componentes.
Descargar prueba gratuitaLa prueba de 30 días incluye los proyectos de demostración 60.HTML.
PreciosLicencias Single, Team y Site con todo el código fuente.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para empezar?

Descarga la prueba gratuita y empieza a crear interfaces web en Delphi, C++ Builder y .NET.