Class FileHandler

  • All Implemented Interfaces:
    com.sun.net.httpserver.HttpHandler

    public class FileHandler
    extends java.lang.Object
    implements com.sun.net.httpserver.HttpHandler
    Die Klasse FileHandler dient zur Auslieferung von Dateiinhalten über HTTP. Für das Streaming über HTTP wird die Auslieferung von Teilinhalten mit dem Accept-Ranges-Header angeboten und via Range-Header unterstützt. (vgl. https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests)
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      class  FileHandler.Range
      Eine Range bezeichnet einen zusammenhängenden Bereich aus Bytes, der sich aus den Bytepositionen des Beginns und Endes des Bereiches ergibt.
    • Constructor Summary

      Constructors 
      Constructor Description
      FileHandler​(java.lang.String absoluteDirectoryPathAndName)
      Ein neues Objekt der Klasse FileHandler erzeugen
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.lang.String contentRangeHdr​(FileHandler.Range range, java.io.File file)
      Einen Content-Range Header erzeugen
      protected java.lang.String getFileName​(com.sun.net.httpserver.HttpExchange e)
      Den Namen der gewünschten Datei aus der HTTP-Anfrage ermitteln
      void handle​(com.sun.net.httpserver.HttpExchange e)
      Die Datei ermitteln, die sich aus dem angefragten URL ergibt, prüfen, ob die Datei existiert und den Inhalt der Datei abhängig davon, ob ein Range-Header vorhanden ist, ganz oder teilweise ausliefern.
      protected de.uhilger.minsrv.handler.FileHandler.RangeGroup parseRanges​(com.sun.net.httpserver.HttpExchange e, java.io.File file)
      Die Byte-Ranges aus dem Range-Header ermitteln.
      protected void sendNotFound​(com.sun.net.httpserver.HttpExchange e, java.lang.String fname)
      Eine nicht gefunden Antwort senden
      protected void serveFile​(com.sun.net.httpserver.HttpExchange e, java.io.File file)
      Den Inhalt einer Datei ausliefern
      protected void serveFileParts​(com.sun.net.httpserver.HttpExchange e, java.io.File file)
      Einen Teil des Inhalts einer Datei ausliefern Wenn eine Range angefragt wird, hat die Antwort einen Content-Range Header wie folgt: Content-Range: bytes 0-1023/146515 Content-Length: 1024 Wenn mehrere Ranges angefragt werden, hat die Antwort mehrere Content-Range Header als Multipart Response.
      protected void setHeaders​(com.sun.net.httpserver.HttpExchange e, java.io.File file)
      Die Header erzeugen, die unabhängig davon, ob der ganze Inhalt oder nur Teile davon ausgeliefert werden sollen, in der Antwort stehen sollen
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FileHandler

        public FileHandler​(java.lang.String absoluteDirectoryPathAndName)
        Ein neues Objekt der Klasse FileHandler erzeugen
        Parameters:
        absoluteDirectoryPathAndName - der absolute Pfad und Name des Ordners im Dateisystem, der die Inhalte enthaelt, die von diesem Handler ausgeliefert werden sollen
    • Method Detail

      • handle

        public void handle​(com.sun.net.httpserver.HttpExchange e)
                    throws java.io.IOException
        Die Datei ermitteln, die sich aus dem angefragten URL ergibt, prüfen, ob die Datei existiert und den Inhalt der Datei abhängig davon, ob ein Range-Header vorhanden ist, ganz oder teilweise ausliefern.
        Specified by:
        handle in interface com.sun.net.httpserver.HttpHandler
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        Throws:
        java.io.IOException - falls etwas schief geht entsteht dieser Fehler
      • getFileName

        protected java.lang.String getFileName​(com.sun.net.httpserver.HttpExchange e)
        Den Namen der gewünschten Datei aus der HTTP-Anfrage ermitteln
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        Returns:
        Name der gewünschten Datei
      • serveFile

        protected void serveFile​(com.sun.net.httpserver.HttpExchange e,
                                 java.io.File file)
                          throws java.io.IOException
        Den Inhalt einer Datei ausliefern
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        file - die Datei, deren Inhalt ausgeliefert werden soll
        Throws:
        java.io.IOException - falls etwas schief geht entsteht dieser Fehler
      • serveFileParts

        protected void serveFileParts​(com.sun.net.httpserver.HttpExchange e,
                                      java.io.File file)
                               throws java.io.IOException
        Einen Teil des Inhalts einer Datei ausliefern Wenn eine Range angefragt wird, hat die Antwort einen Content-Range Header wie folgt: Content-Range: bytes 0-1023/146515 Content-Length: 1024 Wenn mehrere Ranges angefragt werden, hat die Antwort mehrere Content-Range Header als Multipart Response. Multipart Responses fehlen dieser Implementierung noch. (vgl. https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests)
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        file - die Datei, deren Inhalt teilweise ausgeliefert werden soll
        Throws:
        java.io.IOException - falls etwas schief geht entsteht dieser Fehler
      • parseRanges

        protected de.uhilger.minsrv.handler.FileHandler.RangeGroup parseRanges​(com.sun.net.httpserver.HttpExchange e,
                                                                               java.io.File file)
        Die Byte-Ranges aus dem Range-Header ermitteln. Der Range-Header kann unterschiedliche Abschnitte bezeichnen, Beispiele: Range: bytes=200-1000, 2000-6576, 19000- Range: bytes=0-499, -500 (vgl. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range)
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        file - die Datei, deren Inhalt ausgeliefert werden soll
        Returns:
        die angefragten Byte-Ranges
      • contentRangeHdr

        protected java.lang.String contentRangeHdr​(FileHandler.Range range,
                                                   java.io.File file)
        Einen Content-Range Header erzeugen
        Parameters:
        range - die Range, aus deren Inhalt der Header erzeugt werden soll
        file - die Datei, die den Inhalt liefert, der vom Header bezeichnet wird
        Returns:
        der Inhalt des Content-Range Headers
      • setHeaders

        protected void setHeaders​(com.sun.net.httpserver.HttpExchange e,
                                  java.io.File file)
                           throws java.io.IOException
        Die Header erzeugen, die unabhängig davon, ob der ganze Inhalt oder nur Teile davon ausgeliefert werden sollen, in der Antwort stehen sollen
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        file - die Datei, für die die Header gelten
        Throws:
        java.io.IOException - falls etwas schief geht entsteht dieser Fehler
      • sendNotFound

        protected void sendNotFound​(com.sun.net.httpserver.HttpExchange e,
                                    java.lang.String fname)
                             throws java.io.IOException
        Eine nicht gefunden Antwort senden
        Parameters:
        e - das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum Anfertigen und Senden der Antwort
        fname - Name der Datei, die nicht gefunden wurde
        Throws:
        java.io.IOException - falls etwas schief geht entsteht dieser Fehler