Sisk

Dateiserver

Diese Seite wurde automatisch aus dem Englischen übersetzt. Original lesen

Sisk stellt den Namespace Sisk.Http.FileSystem bereit, der Werkzeuge zum Bereitstellen statischer Dateien, zur Verzeichnisauflistung und zur Dateikonvertierung enthält. Diese Funktion ermöglicht das Bereitstellen von Dateien aus einem lokalen Verzeichnis, mit Unterstützung für Range‑Anfragen (Audio‑/Video‑Streaming) und benutzerdefinierte Dateiverarbeitung.

Bereitstellen statischer Dateien #

Der einfachste Weg, statische Dateien bereitzustellen, ist Router.MapFileSystem. Diese Methode ordnet ein URL‑Präfix einem Verzeichnis auf dem Datenträger zu.

C#
using Sisk.Core.Http;
using Sisk.Core.Http.FileSystem;

// mappt das Stammverzeichnis des Servers auf das aktuelle Verzeichnis
mainRouter.MapFileSystem("/", Directory.GetCurrentDirectory());

// mappt /assets auf den Ordner "public/assets"
mainRouter.MapFileSystem(
    "/assets",
    Path.Combine(Directory.GetCurrentDirectory(), "public", "assets"));

Wenn eine Anforderung dem Routen‑Präfix entspricht, sucht der HttpFileServerHandler im angegebenen Verzeichnis nach einer Datei. Wird sie gefunden, wird sie bereitgestellt; andernfalls wird eine 404‑Antwort (oder 403 bei verweigertem Zugriff) zurückgegeben.

HttpFileServer.CreateServingRoute ist weiterhin verfügbar, wenn Sie ein Route‑Objekt explizit erstellen müssen, aber MapFileSystem ist die direkteste Option für Anwendungscode.

Beide Methoden erzeugen eine PrefixRoute (eine Regex‑Route vor Sisk 1.7), die eine dynamische Route ist. Statische Routen werden immer vorher getestet, sodass ein Dateiserver, der auf / gemappt ist, als Fallback für Pfade dient, die Ihre anderen Routen nicht verarbeiten. Dateiserver‑Routen werden nicht von HttpServerConfiguration.ForceTrailingSlash beeinflusst.

HttpFileServerHandler #

Für mehr Kontrolle darüber, wie Dateien bereitgestellt werden, können Sie HttpFileServerHandler manuell instanziieren und konfigurieren.

C#
var fileHandler = new HttpFileServerHandler("/var/www/html");

// Verzeichnisauflistung aktivieren (standardmäßig deaktiviert)
fileHandler.AllowDirectoryListing = true;

// benutzerdefinierten Routenpräfix festlegen (dies wird vom Anforderungspfad entfernt)
fileHandler.RoutePrefix = "/public";

// Registriert den Handler unter /public
mainRouter.MapFileSystem("/public", fileHandler);

Konfiguration #

PropertyDescription
RootDirectoryPathDer absolute oder relative Pfad zum Stammverzeichnis, aus dem Dateien bereitgestellt werden.
RoutePrefixDer Routenpräfix, der beim Auflösen von Dateien vom Anforderungspfad entfernt wird. Standard ist /.
AllowDirectoryListingWenn auf true gesetzt, aktiviert die Verzeichnisauflistung, wenn ein Verzeichnis angefordert wird und keine Indexdatei gefunden wird. Standard ist false.
FileConvertersEine Liste von HttpFileServerFileConverter, die verwendet werden, um Dateien vor dem Bereitstellen zu transformieren.

Verzeichnisauflistung #

Wenn AllowDirectoryListing aktiviert ist und der Benutzer einen Verzeichnispfad anfordert, erzeugt Sisk eine HTML‑Seite, die den Inhalt dieses Verzeichnisses auflistet.

Die Verzeichnisauflistung enthält:

  • Navigation zum übergeordneten Verzeichnis (..).
  • Liste der Unterverzeichnisse.
  • Liste der Dateien mit Größe und letztem Änderungsdatum.

Dateikonverter #

Dateikonverter ermöglichen es, bestimmte Dateitypen abzufangen und anders zu verarbeiten. Beispielsweise möchten Sie ein Bild transkodieren, eine Datei on‑the‑fly komprimieren oder eine Datei mit Teilinhalt (Range‑Anfragen) bereitstellen.

Sisk enthält zwei integrierte Konverter für Media‑Streaming:

  • HttpFileAudioConverter: Verarbeitet .mp3, .ogg, .wav, .flac, .ogv.
  • HttpFileVideoConverter: Verarbeitet .webm, .avi, .mkv, .mpg, .mpeg, .wmv, .mov, .mp4.

Diese Konverter ermöglichen die Unterstützung von HTTP Range Requests, sodass Clients in Audio‑ und Videodateien vorspulen können.

Erstellen eines benutzerdefinierten Konverters #

Um einen benutzerdefinierten Dateikonverter zu erstellen, erben Sie von HttpFileServerFileConverter und implementieren CanConvert und Convert.

C#
using Sisk.Core.Http;
using Sisk.Core.Http.FileSystem;

public class MyTextConverter : HttpFileServerFileConverter
{
    public override bool CanConvert(FileInfo file)
    {
        // nur auf .txt-Dateien anwenden
        return file.Extension.Equals(".txt", StringComparison.OrdinalIgnoreCase);
    }

    public override HttpResponse Convert(FileInfo file, HttpRequest request)
    {
        string content = File.ReadAllText(file.FullName);
        
        // gesamten Textinhalt in Großbuchstaben umwandeln
        return new HttpResponse(200)
        {
            Content = new StringContent(content.ToUpper())
        };
    }
}

Fügen Sie es dann Ihrem Handler hinzu:

C#
var handler = new HttpFileServerHandler("./files");
handler.FileConverters.Add(new MyTextConverter());

Tippen, um die Dokumentation und die API-Referenz zu durchsuchen.