package javacodebook.server.stream; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** * Ein Servlet, dass eine Binärdatei an den Browser ausliefert. Der * Dateiname wird als Parameter übergeben. Vorsicht: Damit werden auch * eventuell sicherheitskritische Dateien ausgeliefert! Für den Produktivbetrieb * muss auf jeden Fall eine Beschränkung auf erlaubte Verzeichnisse eingefügt * werden. */ public class StreamServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //Parameter file auswerten und überprüfen, ob Datei existiert String filename = request.getParameter("file"); if(filename == null || !(new File(filename)).exists()) return; //den korrekten Content-Type ermitteln String mimeType = getServletConfig().getServletContext().getMimeType(filename); response.setContentType(mimeType); //statt eines Writers muss ein Stream verwendet werden ServletOutputStream out = response.getOutputStream(); FileInputStream in = new FileInputStream(filename); byte[] buffer = new byte[8192]; int bytesRead = 0; while((bytesRead = in.read(buffer)) > 0) out.write(buffer, 0, bytesRead); in.close(); out.close(); //ganz wichtig bei sehr kleinen Dateien: response-Buffer-flush response.flushBuffer(); } }