Servidor de Archivos
Esta página fue traducida automáticamente del inglés. Leer el original
Sisk proporciona el espacio de nombres Sisk.Http.FileSystem, que contiene herramientas para servir archivos estáticos, listar directorios y convertir archivos. Esta característica le permite servir archivos desde un directorio local, con soporte para solicitudes de rango (transmisión de audio/video) y procesamiento de archivos personalizado.
Servir archivos estáticos #
La forma más sencilla de servir archivos estáticos es Router.MapFileSystem. Este método asigna un prefijo de URL a un directorio en disco.
using Sisk.Core.Http;
using Sisk.Core.Http.FileSystem;
// asigna la raíz del servidor al directorio actual
mainRouter.MapFileSystem("/", Directory.GetCurrentDirectory());
// asigna /assets a la carpeta "public/assets"
mainRouter.MapFileSystem(
"/assets",
Path.Combine(Directory.GetCurrentDirectory(), "public", "assets"));Cuando una solicitud coincide con el prefijo de ruta, el HttpFileServerHandler buscará un archivo en el directorio especificado. Si lo encuentra, servirá el archivo; de lo contrario, devolverá una respuesta 404 (o 403 si se niega el acceso).
HttpFileServer.CreateServingRoute sigue disponible cuando necesita crear un objeto Route explícitamente, pero MapFileSystem es la opción más directa para el código de la aplicación.
Ambos métodos crean una PrefixRoute (una ruta regex antes de Sisk 1.7), que es una ruta dinámica. Las rutas estáticas siempre se prueban antes, por lo que un servidor de archivos asignado a / funciona como alternativa para las rutas que sus otras rutas no manejan. Las rutas del servidor de archivos no se ven afectadas por HttpServerConfiguration.ForceTrailingSlash.
HttpFileServerHandler #
Para tener más control sobre cómo se sirven los archivos, puede instanciar y configurar HttpFileServerHandler manualmente.
var fileHandler = new HttpFileServerHandler("/var/www/html");
// habilita el listado de directorios (deshabilitado por defecto)
fileHandler.AllowDirectoryListing = true;
// establece un prefijo de ruta personalizado (esto se recortará del camino de la solicitud)
fileHandler.RoutePrefix = "/public";
// registra el manejador bajo /public
mainRouter.MapFileSystem("/public", fileHandler);Configuración #
| Propiedad | Descripción |
|---|---|
RootDirectoryPath | La ruta absoluta o relativa al directorio raíz desde el cual se sirven los archivos. |
RoutePrefix | El prefijo de ruta que se recortará del camino de la solicitud al resolver archivos. El valor predeterminado es /. |
AllowDirectoryListing | Si se establece en true, habilita el listado de directorios cuando se solicita un directorio y no se encuentra un archivo índice. El valor predeterminado es false. |
FileConverters | Una lista de HttpFileServerFileConverter utilizada para transformar archivos antes de servirlos. |
Listado de Directorios #
Cuando AllowDirectoryListing está habilitado y el usuario solicita una ruta de directorio, Sisk generará una página HTML que lista el contenido de ese directorio.
El listado de directorios incluye:
- Navegación al directorio padre (
..). - Lista de subdirectorios.
- Lista de archivos con tamaño y fecha de última modificación.
Convertidores de Archivos #
Los convertidores de archivos le permiten interceptar tipos de archivo específicos y manejarlos de forma diferente. Por ejemplo, podría querer transcodificar una imagen, comprimir un archivo al vuelo, o servir un archivo usando contenido parcial (solicitudes de rango).
Sisk incluye dos convertidores integrados para transmisión de medios:
HttpFileAudioConverter: Maneja.mp3,.ogg,.wav,.flac,.ogv.HttpFileVideoConverter: Maneja.webm,.avi,.mkv,.mpg,.mpeg,.wmv,.mov,.mp4.
Estos convertidores habilitan el soporte para solicitudes de rango HTTP, permitiendo a los clientes buscar dentro de archivos de audio y video.
Crear un convertidor personalizado #
Para crear un convertidor de archivos personalizado, herede de HttpFileServerFileConverter e implemente CanConvert y Convert.
using Sisk.Core.Http;
using Sisk.Core.Http.FileSystem;
public class MyTextConverter : HttpFileServerFileConverter
{
public override bool CanConvert(FileInfo file)
{
// aplicar solo a archivos .txt
return file.Extension.Equals(".txt", StringComparison.OrdinalIgnoreCase);
}
public override HttpResponse Convert(FileInfo file, HttpRequest request)
{
string content = File.ReadAllText(file.FullName);
// convertir todo el contenido de texto a mayúsculas
return new HttpResponse(200)
{
Content = new StringContent(content.ToUpper())
};
}
}Luego, agréguelo a su manejador:
var handler = new HttpFileServerHandler("./files");
handler.FileConverters.Add(new MyTextConverter());