Java WebServer?

Maik20

Erfahrenes Mitglied
Hallo,

ich habe mir einen kleinen WebServer gebastelt und schaffe es derzeit html Dateien an den Browser zu schicken. Etwa so:

Code:
fis = new FileInputStream( fileName );
			statusLine = "HTTP/1.0 200 OK" + CRLF ;
			contentTypeLine = "Content-type: " + contentType( fileName ) + CRLF ;
			contentLengthLine = "Content-Length: " + (new Integer(fis.available())).toString() + CRLF;
// Send the status line.
		output.write(statusLine.getBytes());

		// 	Send the server line.
		output.write(serverLine.getBytes());

		// Send the content type line.
		output.write(contentTypeLine.getBytes());

		// Send the Content-Length
		output.write(contentLengthLine.getBytes());

		// 	Send a blank line to indicate the end of the header lines.
		output.write(CRLF.getBytes());

		if (sendFile){
			sendBytes(fis, output) ;
		}else{
			output.write(entityBody.getBytes());
		}
		if (fis != null){
			fis.close();
		}

Code:
private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception{
    	// Construct a 1K buffer to hold bytes on their way to the socket.
    	byte[] buffer = new byte[1024] ;
    	int bytes = 0 ;

    	// Copy requested file into the socket's output stream.
    	while ((bytes = fis.read(buffer)) != -1 ) {
    		os.write(buffer, 0, bytes);
    	}
    }

Code:
private static String contentType(String fileName){
    	if (fileName.endsWith(".htm") || fileName.endsWith(".html")){
    		return "text/html";
    	}else if (fileName.endsWith(".mp3")){
    		return "audio/mpeg";
    	}
    	return "";
    }

Jetzt möchte ich jedoch auch ein mp3-Datei an den Browser schicken. Der Browser soll dann das "Speichern untern" Fenster öffnen. Leider klappt das nicht, die Datei wird im Browser angezeigt und nicht zum Speichern angeboten. Jemand eine Idee was ich falsch mache?
 
Hi Maik20,

wie meinst du das "angezeigt"? Wird die Datei im Browser abgespielt oder binär auf dem Bildschirm angegeben? ;)

Naja, füge noch ein Headerfeld hinzu, dann sollte das ganze funktionieren.

Code:
Content-Disposition: attachment; filename=DATEINAME.mp3

Ausserdem würde ich noch eine andere Zeile empfehlen;

Code:
Connection: close

Diese Zeile teilt dem Browser mit, dass der Server nach Abschluss der Übertragung den Socket schließt. Meiner Erfahrung nach lassen sich so lange Wartezeiten auf Timeouts umgehen ;)

Gruß
BK
 
Zurück