ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
11121
11121
EMPFEHLEN
-
21.10.05 19:37 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Weils desöfteren angefragt wird hier mal ein Beispiel wie man Dateien zum Client Streamen kann:
Hier sollte man die getFileToDownload() Methode entsprechend implementieren (Gegebenenfalls noch weitere Parameter hineinreichen etc...)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
package de.tutorials; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet Class * * @web.servlet name="downloadServlet" display-name="Simple DownloadServlet" * description="Simple Servlet for Streaming Files to the Clients * Browser" * @web.servlet-mapping url-pattern="/download" */ public class DownloadServlet extends HttpServlet { static final int BUFFER_SIZE = 16384; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = getFileToDownload(); prepareResponseFor(response, file); streamFileTo(response, file); } private File getFileToDownload() { return new File("c:/foo.jar"); } private void streamFileTo(HttpServletResponse response, File file) throws IOException, FileNotFoundException { OutputStream os = response.getOutputStream(); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead = 0; while ((bytesRead = fis.read(buffer)) > 0) { os.write(buffer, 0, bytesRead); } os.flush(); fis.close(); } private void prepareResponseFor(HttpServletResponse response, File file) { StringBuilder type = new StringBuilder("attachment; filename="); type.append(file.getName()); response.setContentLength((int) file.length()); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", type.toString()); } }
Elemente der web.xml:
Code :1 2 3 4 5 6 7 8 9 10 11
<servlet> <description><![CDATA[Simple Servlet for Streaming Files to the Clients Browser]]></description> <display-name>Simple DownloadServlet</display-name> <servlet-name>downloadServlet</servlet-name> <servlet-class>de.tutorials.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>downloadServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping>
Aufrufen kann man das ganze (beispielsweise) über:
http://localhost:8080/DER_NAME_DEINER_WEB_APP/download
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo Thomas,
ich habe den Code bei mir getested und es funktioniert fast wie gewünscht.
Das Problem kann aber auch bei meinem Client liegen. Ich nutze keine .jsp sonder lege die angeforderte Datei direkt beim client ab.
Hier ist mein Clientcode:
So erhalte ich aber immer noch ein paar Headerdaten. Das erzeugte file wäre dann so:Code :1 2 3 4 5 6 7 8 9 10 11 12
byte[] buffer = new byte[18000]; int read = 0; DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream())); FileOutputStream out = new FileOutputStream("C:\\DEV\\abc.xml"); while(true) { read = dis.read(buffer); if (read == -1) { break; } out.write(buffer, 0, read); }
oder wenn ich prepareRespnseFor() weglasse:HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=XML_test.xml
Content-Type: application/octet-stream
Content-Length: 1494
Date: Mon, 05 May 2008 13:55:36 GMT
Connection: keep-alive
<?xml version="1.0" encoding="UTF-8"?><SSWpacket xmlns:xsi="http://www.w3.org/2001.........................
Wie kann ich verhindern das die Headerdaten mitgesendet werden? das ursprungsfile beginnt mit <?xml......HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Mon, 05 May 2008 14:05:49 GMT
Connection: close
<?xml......
Hat jemand einen Tip?
Besten Dank
xraxGeändert von xrax (05.05.08 um 16:08 Uhr)
Ähnliche Themen
-
Beispiel für einfaches Testen von JavaScript + Codeabdeckung.
Von Konstantin Denerz im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 16.09.09, 14:25 -
Fehler - einfaches RMI Beispiel funktioniert nur lokal
Von Froebel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 24.07.08, 08:14 -
Einfaches Beispiel zu Remoting mit Springframework .Net
Von Thomas Darimont im Forum .NET CaféAntworten: 0Letzter Beitrag: 23.06.07, 13:57 -
Einfaches Beispiel zu .Net Remoting
Von Thomas Darimont im Forum .NET Web und KommunikationAntworten: 0Letzter Beitrag: 01.03.07, 01:02 -
[WinSocket] Ein einfaches Beispiel
Von Tobias K. im Forum C/C++Antworten: 13Letzter Beitrag: 17.02.05, 17:23






Zitieren
Login





