# Speichern von mehreren Dateien (BLOBS)



## Askadi (27. Jan 2013)

Hallo...

habe momentan folgenden Code der auch ohne Probleme funktioniert:


```
if(fromPAGE.equals("download"))
		{
			// Unterlagen id holen
			int id = Integer.parseInt(request.getParameter("id"));
			
			try
			{
				DBDatei datei = DAO.selectDatei(con, id);
			
				Blob  b = datei.getDatei();

				response.setContentLength((int) b.length());
		        response.setHeader("Content-Disposition","attachment;filename="+datei.getDateiname());
		            
		        InputStream is = b.getBinaryStream();
		        ServletOutputStream os = response.getOutputStream();
		            
		        byte buf[] = new byte[(int) b.length()];
		            
		        is.read(buf);
		        
		        os.write(buf); 
	 			os.flush();      
		 		os.close();
	
			}
			catch(Exception e)
			{
				e.printStackTrace();	
			}	 		
		}
```

Ich hole mir eine Datei (BLOB) aus der Datenbank un kann diese dann speichern wo ich es will (z.B. Desktop)

Ich will nun das ganze erweitern bzw. eine neue funtkion in der ich mehrere Dateien gleichzeitig speichern kann.

Habe schon einiges versucht hab aber keine wirkliche Idee wie man das machen sollte.

Ich rufe eine andere DB Methode auf die mir eine Liste mit DBDatei zurück gibt aber wie kann ich dann diese speichern.

List<DBDatei> dateien = DAO.selectDateien(con,ids);

Hoffe das mir hier jemand weiterhelfen kann oder mich evtl weiterverlinken.

MfG
Askadi


----------



## Timothy Truckle (27. Jan 2013)

Askadi hat gesagt.:


> List<DBDatei> dateien = DAO.selectDateien(con,ids);
> 
> Hoffe das mir hier jemand weiterhelfen kann oder mich evtl weiterverlinken.


Ich würde ja einfach über diese Liste iterieren und  den try/catch-Block für jedes Element ausführen, 

Du nicht?

bye
TT


----------



## Askadi (27. Jan 2013)

Funktioniert so leider nicht oder ich mache etwas falsch es wird leider nur der erste Listen Eintrag zum Download angeboten.


```
if(fromPAGE.equals("downloads"))
		{
			// Unterlagen id holen
			int ids[] = {21,61};
			List<DBDatei> dateien = DAO.selectDateien(con,ids);
			System.out.println(dateien.size());
			for(int i = 0;i < dateien.size();i++)
			{
				try
				{
					
				
					Blob  b = dateien.get(i).getDatei();

					response.setContentLength((int) b.length());
			        response.setHeader("Content-Disposition","attachment;filename="+dateien.get(i).getDateiname());
			            
			        InputStream is = b.getBinaryStream();
			        ServletOutputStream os = response.getOutputStream();
			            
			        byte buf[] = new byte[(int) b.length()];
			            
			        is.read(buf);
			        
			        os.write(buf); 
		 			os.flush();      
			 		os.close();
		
				}
				catch(Exception e)
				{
					e.printStackTrace();	
				}	 	
			}
			
		}
```

Ich weiss das es geht habe schon mehrfach Dateien gedownloadet diese wurden dann beim Speichern unter Dialog mit , getrennt angezeigt.

ungefähr so: "test.png","test2.png","test3.jpg"


----------



## Timothy Truckle (27. Jan 2013)

Askadi hat gesagt.:


> Funktioniert so leider nicht oder ich mache etwas falsch es wird leider nur der erste Listen Eintrag zum Download angeboten.
> Ich weiss das es geht habe schon mehrfach Dateien gedownloadet diese wurden dann beim Speichern unter Dialog mit , getrennt angezeigt.
> 
> ungefähr so: "test.png","test2.png","test3.jpg"


Die Schleife sieht erstmal gut aus.
Aber ich sehe hier auch nichts, weas irgendwie mit einem Download-Dialog zu tun hätte...

bye


----------



## Nogothrim (28. Jan 2013)

Das kann so nicht funktionieren, du hast ja nur ein HTTP Response Objekt, das in der Schleife überschrieben wird, aber am Ende hast du nur einen Request.


----------



## Askadi (28. Jan 2013)

Also kann mir niemand weiterhelfen ?


----------



## Timothy Truckle (28. Jan 2013)

Wenn Du uns die Stelle, wo Du den Save-Dialog erzeugts nicht zeigts: nein.

bye
TT


----------



## Askadi (28. Jan 2013)

Naja mein Code ist der im ersten Beitrag und dieser funktioniert einwandfrei mehr habe ich nicht im Servlet stehen.

Es poppt einfach das Explorer Fenster auf und ich kann sagen wo ich die Datei speichern will.

Meine Frage war jetzt wie man das ganze für mehrere Dateien anpassen kann, bzw wenn es nicht geht das ganze evtl gezippt downloaden.


----------



## Timothy Truckle (28. Jan 2013)

Askadi hat gesagt.:


> Naja mein Code ist der im ersten Beitrag und dieser funktioniert einwandfrei mehr habe ich nicht im Servlet stehen.


D.h., Du schreibst die Dateien in Zeile 25 bis 27 auf dem Server? Wieso soll dann der Client ein Verzeichnis bei sich auswählen?

IMHO wäre es sinnvoll die Dateien in ein Zip zu zusammenzufassen, dass kannst Du in einem Rutsch übertragen und der Anwender kann es auf seinem Rechner entpacken...

bye
TT


----------

