# JSP File Download (SVNKit)



## Sempah (22. Sep 2008)

Hallo zusammen,

ich habe ein kleines Problem mit einem FileDownload in JSP.

Hiermit klappt ein Download (File lokal vorhanden)


```
try {
	   String filename = "C:\\file1.txt";

	   response.setContentType("APPLICATION/OCTET-STREAM");
	   String disHeader = "Attachment; Filename=\"myFile.txt\"";
	   response.setHeader("Content-Disposition", disHeader);

	   File fileToDownload = new File(filename);
	   FileInputStream fileInputStream = new FileInputStream(fileToDownload);
	   int i;
	   while ((i=fileInputStream.read())!=-1)
	   {
	      out.write(i);
	   }
	   fileInputStream.close();
	   out.close();
	   }catch(Exception e) // file IO errors
	   {
	   e.printStackTrace();
	}
```

Mein Problem ist jedoch das sich die zu downloadene Datei nicht auf meinem FileSystem befindet, sondern in einem Subversion Repository.



```
getFile(String path, long revision, Map properties, OutputStream contents)
          Fetches the contents and/or properties of a file located at the specified path in a particular revision.
```

also mit: repository.getFile("meinPfadZumRepository/Datei.txt", -1, properties, OUTPUTSTREAM);
kann ich die Datei in einen Output Stream schreiben.

Wie könnte ich nun den DL realisieren?


----------



## maki (22. Sep 2008)

Suche mal nach Stream Servlet und ähnlichem in google.


----------



## Sempah (22. Sep 2008)

Habe es jetzt auf eine andere Weise hinbekommen und kann die Datei auch herunterladen.

Gibt es einen BinaryOutputStream? bzw. ist es möglich Word Dokumente mit Formatierung in einen OutputStream zu laden um es danach zu downloaden? 

txt.files bzw sonstige Quellcode-Dateien funktionieren, nur wie könnte ich mit PDF's/Images/Docs etc umgehen?


----------



## maki (23. Sep 2008)

Sempah hat gesagt.:
			
		

> Habe es jetzt auf eine andere Weise hinbekommen und kann die Datei auch herunterladen.
> 
> Gibt es einen BinaryOutputStream? bzw. ist es möglich Word Dokumente mit Formatierung in einen OutputStream zu laden um es danach zu downloaden?
> 
> txt.files bzw sonstige Quellcode-Dateien funktionieren, nur wie könnte ich mit PDF's/Images/Docs etc umgehen?


Mit einem Stream Servlet 

JSPs sind dafür nicht geeignet, da JSP eine Präsentationstechnologie für Textstreams (HTML) sind, das verträgt sich nicht mit binären Daten.


----------



## Sempah (23. Sep 2008)

Schade ;(

Aber habe hier: http://www.devx.com/getHelpOn/Article/11698/1954
schonmal ein nettes Bsp gefunden, jedoch habe im Moment noch keine Ahnung wie ich das in meine JSP einbaue.

Vielen Dank erstmal.


----------



## maki (23. Sep 2008)

>> ... habe im Moment noch keine Ahnung wie ich das in meine JSP einbaue. 

Gar nicht.

Einen link zu deinem Servlet solltest du anzeigen.


----------



## Sempah (23. Sep 2008)

Noch eine Frage:

Da ich den ganzen Java Code ehh in einer Klasse später auslagere, was hat mein Binär Download dann mit JSP zu tun?
Also so z.B:

public class Aktionen {

public downloadFile(SVNRepository, filepath, ...) {
repository.getFile(filepath, ...);
// Java Code zum herunterladen der Datei
}


und in der JSP rufe ich dann die Function auf, sofern z.b. ein bestimmter request Parameter gesetzt ist.


----------



## maki (23. Sep 2008)

>> Da ich den ganzen Java Code ehh in einer Klasse später auslagere, was hat mein Binär Download dann mit JSP zu tun? 

Nicht sicher ob ich die Frage verstanden habe, aber prinzipiell kannst du die Funktionalität natürlich auslagern, der Aufruf muss aber immer noch auf einem Servlet erfolgen.


----------



## Sempah (24. Sep 2008)

Hallo, ich mal wieder 

Verschiedene Aktionen funktionieren mittlerweile annähernd akzeptabel und jetzt möchte ich die Funktionen zusammenfassen.
Ich habe mehrere JSP Dateien und hatte eigtl vor ein "main"-JSP Datei zu erstellen, in der ich die anderen JSP Dateien include.


Habe jetzt z.B. eine add_dir.jsp und eine add_file.jsp, in der ich jeweils eine Instanz meines Repositories erstelle und natürlich darauf zugreife.

Wenn ich nun die 2 Aktions-JSP's in der main.jsp includen möchte, bekomme ich einen Fehler (duplicate local variable repository ...), was natürlich verständlich ist.

main.jsp:
<%@ include file="add_dir.jsp" %>
<%@ include file="add_file.jsp" %>

Die imports / Instanz Generierung innerhalb der main.jsp machen und aus den aktions jsp's herausnehmen geht ja auch nicht ;(


----------



## maki (25. Sep 2008)

Einfache JSP inkludes sind sinnfrei, da sie keinen Kontext haben (variablen etc. ), es gibt Frameworks die diese Lücke schliessen, zB. Tiles.


----------



## Sempah (25. Sep 2008)

Erstmal danke für die Antwort, aber ich komme von einem Problem ins Nächste, bzw von der einen neuen "Technik" in die nächste. Wollte es eigtl alles bei JSP belassen (recht simpel halten), jedoch kommt da schon "Servlets", "Tiles", TLD, EL, Struts, ... hinzu


----------



## maki (25. Sep 2008)

Jaja, WebApps in Java sind alles anderes alles Simpel 

JSP nutzt dir gar nix ohne Servlets zu verstehen, da sollte man anfangen.


----------

