Package de.uhilger.minsrv.handler
Class FileHandler
- java.lang.Object
-
- de.uhilger.minsrv.handler.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.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ACCEPT_RANGES_HEADER
static java.lang.String
CONTENT_LENGTH
static java.lang.String
CONTENT_RANGE_HEADER
static java.lang.String
CONTENT_TYPE
static java.lang.String
HTTP_GET
static java.lang.String
LAST_MODIFIED_DATE_HEADER
static java.lang.String
LM_PATTERN
static java.lang.String
RANGE_HEADER
static java.lang.String
RANGE_PATTERN
static int
SC_NOT_FOUND
static int
SC_OK
static int
SC_PARTIAL_CONTENT
static java.lang.String
STR_BLANK
static java.lang.String
STR_BYTES
static java.lang.String
STR_COMMA
static java.lang.String
STR_DASH
static java.lang.String
STR_DOT
static java.lang.String
STR_NOT_FOUND
static java.lang.String
WELCOME_FILE
-
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 erzeugenprotected java.lang.String
getFileName(com.sun.net.httpserver.HttpExchange e)
Den Namen der gewünschten Datei aus der HTTP-Anfrage ermittelnvoid
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 sendenprotected void
serveFile(com.sun.net.httpserver.HttpExchange e, java.io.File file)
Den Inhalt einer Datei ausliefernprotected 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
-
-
-
Field Detail
-
RANGE_HEADER
public static final java.lang.String RANGE_HEADER
- See Also:
- Constant Field Values
-
CONTENT_RANGE_HEADER
public static final java.lang.String CONTENT_RANGE_HEADER
- See Also:
- Constant Field Values
-
ACCEPT_RANGES_HEADER
public static final java.lang.String ACCEPT_RANGES_HEADER
- See Also:
- Constant Field Values
-
LAST_MODIFIED_DATE_HEADER
public static final java.lang.String LAST_MODIFIED_DATE_HEADER
- See Also:
- Constant Field Values
-
CONTENT_TYPE
public static final java.lang.String CONTENT_TYPE
- See Also:
- Constant Field Values
-
CONTENT_LENGTH
public static final java.lang.String CONTENT_LENGTH
- See Also:
- Constant Field Values
-
SC_OK
public static final int SC_OK
- See Also:
- Constant Field Values
-
SC_PARTIAL_CONTENT
public static final int SC_PARTIAL_CONTENT
- See Also:
- Constant Field Values
-
SC_NOT_FOUND
public static final int SC_NOT_FOUND
- See Also:
- Constant Field Values
-
HTTP_GET
public static final java.lang.String HTTP_GET
- See Also:
- Constant Field Values
-
STR_BYTES
public static final java.lang.String STR_BYTES
- See Also:
- Constant Field Values
-
STR_BLANK
public static final java.lang.String STR_BLANK
- See Also:
- Constant Field Values
-
STR_DASH
public static final java.lang.String STR_DASH
- See Also:
- Constant Field Values
-
STR_COMMA
public static final java.lang.String STR_COMMA
- See Also:
- Constant Field Values
-
STR_DOT
public static final java.lang.String STR_DOT
- See Also:
- Constant Field Values
-
STR_NOT_FOUND
public static final java.lang.String STR_NOT_FOUND
- See Also:
- Constant Field Values
-
LM_PATTERN
public static final java.lang.String LM_PATTERN
- See Also:
- Constant Field Values
-
RANGE_PATTERN
public static final java.lang.String RANGE_PATTERN
- See Also:
- Constant Field Values
-
WELCOME_FILE
public static final java.lang.String WELCOME_FILE
- See Also:
- Constant Field Values
-
-
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 interfacecom.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 Antwortfile
- 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 Antwortfile
- 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 Antwortfile
- 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 sollfile
- 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 Antwortfile
- 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 Antwortfname
- Name der Datei, die nicht gefunden wurde- Throws:
java.io.IOException
- falls etwas schief geht entsteht dieser Fehler
-
-