# JPG file in Java Klasse speichern



## klaus1 (3. Okt 2005)

Hi Leute!

Möchte gerne ein JPG File in eine Java Klasse speichern.
funktioniert die APPLET API ? muss hierfür eine lokale kopie des Files bestehen, oder genügt es nur zum Zeitpunkt der Speicherung in das Format IMAGE dass die Datei vorhanden ist?

Habe nämlich auf einem Webserver Files, die ich unbedingt in eine Java klasse speichern muss (nicht links, sondern komplettes binäres file).
Möchte auch über JSP dann dieses Image wieder ausgeben in HTML, dazu allerdings nicht vorher das File wieder irgendwo in JPG hinspeichern, sondern direkt ein IMAGE Format anzeigen lassen!

Lg, Klaus


----------



## Bleiglanz (4. Okt 2005)

wozu Image oder Applet

wenns nur ums streamen über HTTP geht, dann speichere die ganze Datei als byte[] und schicks dieses bei Bedarf direkt an den Outputstream!


----------



## klaus1 (4. Okt 2005)

und wie zeig ich sowas im HTML wieder an? mit img src= geht nur ein PFAD


----------



## Bleiglanz (4. Okt 2005)

ja und?

wie hast du es dir gedacht?

unter dem Pfad soll ein Servlet gemapped sein, das das Bild zurückliefert

google mal nach Servlet + Image


----------



## klaus1 (13. Okt 2005)

habe jetzt das image in bytestream mittels servlet in die datenbank gebracht, und bekomme auch in einem servlet ein byte array mit dem Bild wieder zurück!
Nun möchte ich allerdings das Bild anzeigen im Browser.. wie mach ich das mit dem Servlet?
gibts eine Möglichkeit, das Bild im Browser anzuzeigen, ohne es per FileOutputstream in eine Datei zu schreiben, und per 
	

	
	
		
		

		
			





 anzuzeigen?
Lg, Klaus


----------



## m@nu (14. Okt 2005)

denke das geht nicht ohne temp-datei...

@mod: is das thema hier nicht ein wenig im falschen forum?


----------



## Mag1c (14. Okt 2005)

Moin,

warum soll das nicht gehen ? Das Servlet muß über eine URL ansprechbar sein (z.B. 
	

	
	
		
		

		
		
	


	




). Das Servlet muß dann mit dem Mime-Type "image/jpg" die Daten aus dem byte array ausliefern.

Gruß
Mag1c


----------



## m@nu (14. Okt 2005)

... :-/ klar!  dem browser isses ja eigentlich schnuppe was für eine url im src-attribut steht... hauptsache der richtige mime-type kommt an...


----------



## klaus1 (19. Okt 2005)

hab folgendes probiert:

getImage.jsp:

// Datenbank öffnen, usw.

response.setContentType("image/jpeg");

Blob blob = rs.getBlob("image");

if (blob != null)
{
  int iLen = (int)blob.length();
  ByteArrayOutputStream output = new ByteArrayOutputStream(iLen);
  output.write(blob.getBytes(1, iLen), 0, iLen);
  out.write(output.toString());
}


jetzt bekomme ich auch schon was zurück, nur leider die Meldung, dass das Bild fehlerhaft ist..
Bei der konkreten Gegenüberstellung zwischen dem original file und dem zurückgeliferten, bin ich draufgekommen, dass alles übereinstimmt, bis zum aufruf: out.write(...).
Da bekomme ich nämlich statt den ? andere unerwünschte zeichen, deshalb wahrscheinlich fehlerhaftes bild..
aber warum?
Lg, Klaus


----------



## Bleiglanz (20. Okt 2005)

auf keinen Fall writer verwenden für binärdateien

und auf keinen Fall jsps verwenden um binärdateien zum Client zu schicken (nimm ein Servlet und steck das byte[] direct in den response.getOutputStream)


----------



## klaus1 (20. Okt 2005)

klappt jetzt mit eigenem JSP File:

byte[] imgData = ("bild als byte array"); 
                              response.setContentType("image/jpg");
                                  java.iutputStream o = response.getOutputStream();

o.write(imgData);                            o.flush();
o.close();

nur folgender Fehler bei öfterem aufruf der JSP Page:
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response

Kann ich diese Fehlermeldung mit einem try - catch bereich zumindest unterdrücken?


----------



## bronks (21. Okt 2005)

klaus1 hat gesagt.:
			
		

> klappt jetzt mit eigenem JSP File:
> ...
> nur folgender Fehler bei öfterem aufruf der JSP Page:
> SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
> ...


Die Fehlermeldung kommt vom Container und ist nur SCHWERWIEGEND. Du kannst auch einfach wegschaun, wenn die Fehlermeldung kommt ... oder es so machen (richtig) wie Bleiglanz in seinem letzten Post geschrieben hat. Die erste Antwort, die Dir Gandalf in einem anderen Forum gab, wäre auch meine Empfehlung, wenn ich lese, daß Du das ganze immernoch in eine JSP quetschen willst, denn so verfährst Du Dich nur in unnötigen Problemen.


----------



## daLenz (21. Okt 2005)

hi, du kannst den getOutputstream halt nicht mehr als einmal aufrufen...falls du immernoch kein servlet verwenden willst, könnte dieser workaround weiterhelfen:

einfach am schluss der jsp-seite noch


```
out.clear();
out = pageContext.pushBody();
```

einfügen

...aber wie schon mehrfach gesagt...steck das ganze in ein servlet!

greetz


----------



## klaus1 (24. Okt 2005)

danke, klappt!


----------

