Thomas Darimont
Erfahrenes Mitglied
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...)
Elemente der web.xml:
Aufrufen kann man das ganze (beispielsweise) über:
http://localhost:8080/DER_NAME_DEINER_WEB_APP/download
Gruss Tom
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:
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:
<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 Tom