Speichern von mehreren Dateien (BLOBS)

Askadi

Mitglied
Hallo...

habe momentan folgenden Code der auch ohne Probleme funktioniert:

Java:
		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
 
Funktioniert so leider nicht oder ich mache etwas falsch es wird leider nur der erste Listen Eintrag zum Download angeboten.

Java:
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"
 
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
 
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.
 
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.
 
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
 

Zurück
Oben