Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Ich mal wieder:-) ich hab ein Problem ein Bild auszulesen das in der datenbank als blob gespeichert ist. ich rufe die folgende funktion per servlet auf.

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException

	{

		writeImage(request, response);

	}


	public void writeImage(HttpServletRequest request, HttpServletResponse response) throws IOException 

	{

		String firmenId = request.getParameter("firmenId");


		if(firmenId != null && !firmenId.equals(""))

		{

			response.setContentType("image/GIF");

			request.getSession(true);


			DBConnection db = new DBConnection();


			try

			{

				db.openConnection();

				String sql = "SELECT logo FROM `Tabellenname` WHERE id = " + firmenId + ";";

				ResultSet rs = db.executeSelect(sql);

				Blob bl = null;

				while(rs.next())

				{

					bl = rs.getBlob("logo");

				}


				if(bl != null)

				{

					InputStream input = bl.getBinaryStream();


					BufferedImage image = ImageIO.read(input);


					byte[] data = ((DataBufferByte) image.getData().getDataBuffer()).getData();


					if (data != null)

					{

						response.getOutputStream().write(data);

					}




				}

			}

			catch (Exception e)

			{

				e.printStackTrace();

			}

			finally

			{

				db.closeConnection();

			}

		}

Ich mal wieder:-) ich hab ein Problem ein Bild auszulesen das in der datenbank als blob gespeichert ist. ich rufe die folgende funktion per servlet auf.

Ja und? Meine Glaskugel ist in der Spüle und tropft grade ab und es regnet hier im Moment

Phil

Ja und? Meine Glaskugel ist in der Spüle und tropft grade ab und es regnet hier im Moment

Phil

das ist ja eine sehr hilfreiche antwort:upps weiss nicht was so ne antwort hier zu suchen hat

na ja ich find es nicht zu schammig. also das bild wird nicht angezeigt, sondern nur ein rotes x und eine fehlermeldung gibt es nicht.

Was hast du denn schon alles versucht um das Problem zu lösen?

Wird bei der Datenbankabfrage wirklich ein Objekt zurück geliefert?

Ist dieses wirklich ein Bild? Und schon im *.gif Format?

Servus,

also Deine Frage war wirklich keine. Du hast ein Problem und Du hast Code geliefert. Deshalb waren die Hinweise absolut gerechtfertigt und Du hättest daraufhin freundlicher nachfragen können.

Aber jetzt noch zum Problem: bist Du sicher, dass Bytes rauskommen bei Deiner Abfrage? Warum baust Du das in ein BufferedImage? Du willst doch nur die Bytes, also lies die doch direkt aus dem Stream.

Dann solltest Du noch neben der Angabe des ContentTypes die ContentLength setzen: response.setContentLength(data.length);

Und Du solltest den Stream flushen: output.flush();

Wenn dann wirklich Daten da sind und die auch noch den korrekten ContentType haben, dann funktioniert das.

Peter

Was mir noch dazu einfällt:

"Wie" sind die Bilder in die DB gekommen. Wenn z.B. da aus Windows via OLE z.B. Access importiert wurde, liegt das Blob als OLE vor und nicht direkt als Gif.

Falls ich Bilder als Blob speichere (wovon man abrät) können sie z.B. auch Base64 codiert sein Mein Tipp: Lass Dir mal die Blob Daten in eine Datei schreiben und öffne diese mit einem Graphikprogramm. Wenn es nicht geht, dann liegt kein Gif vor.

Gern gemachter Fehler: Innerhalb der DB Bilder zu speichern (JPEG, GIF, PNG), aber nicht den Content-Typ und dann z.B. versuchen einfach die Blobs als JPEGs zu interpretieren, das geht so lange gut, so lange ein JPEG vorliegt.

Ebenso kann man bei manchen DBMS die max. Blobgröße bestimmen, evtl dort auch einmal prüfen, ob die Daten korrekt vorliegen

HTH Phil

ja danke, hab meinen fehler schin gefunden, ich hatte einfach nur keinen anfangs und endpunkt der bytes angegeben und somit wusste mein programm nicht wieviel bytes es lesen sollte und hat nur das erste gelesen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.