# Javascript zum Fotos als base64 in Datenbank zu schreiben Zusätzlich zu den Originalfotos wird auch ein Thumbnail mit 10% größe erstellt. ```java // 1. Java‑Typen holen var Base64 = Java.type('java.util.Base64'); var ByteArrayInputStream = Java.type('java.io.ByteArrayInputStream'); var ByteArrayOutputStream= Java.type('java.io.ByteArrayOutputStream'); var ImageIO = Java.type('javax.imageio.ImageIO'); var BufferedImage = Java.type('java.awt.image.BufferedImage'); var AffineTransform = Java.type('java.awt.geom.AffineTransform'); var AffineTransformOp = Java.type('java.awt.image.AffineTransformOp'); // 2. Höchste Medien‑ID für diese protokoll_id und raum_id ermitteln var hochste_medien_id = 0; try { var dataArray = datasourceHelper.get("SQL-hochste_medien_id"); if (dataArray && dataArray.getRows().size() > 0) { var firstRow = dataArray.getRow(0); if (firstRow && firstRow.getFieldAsString("MEDIEN_ID")) { hochste_medien_id = parseInt("" + firstRow.getFieldAsString("MEDIEN_ID"), 10); } } } catch (e) { // Falls die Abfrage fehlschlägt, bleibt hochste_medien_id bei 0 } // 3. Base64‑Bilder aufsplitten var medienBildValue = medien_bild.getValue() || ""; var base64Imgs = []; if (medienBildValue) { var splitValues = medienBildValue.split(";"); for (var i = 0; i < splitValues.length; i++) { var val = splitValues[i].trim(); if (val) { base64Imgs.push(val); } } } // 4. Zustands‑Variablen var protokoll_id = "" + (state.protokoll_id || ''); var raum_id = "" + (state.raum_id || ''); var raum_bezeichnung = "" + (state.raum_bezeichnung || 'default_raum_bezeichnung'); var medien_beschreibung_val = "" + (medien_beschreibung.getValue() || ''); // 5. Funktion für Thumbnails function makeThumbnail(base64String, scale) { try { var bytes = Base64.getDecoder().decode(base64String); var inStream = new ByteArrayInputStream(bytes); var img = ImageIO.read(inStream); var newW = Math.round(img.getWidth() * scale); var newH = Math.round(img.getHeight() * scale); var thumb = new BufferedImage(newW, newH, img.getType()); var at = new AffineTransform(); at.scale(newW / img.getWidth(), newH / img.getHeight()); var op = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); thumb = op.filter(img, thumb); var outStream = new ByteArrayOutputStream(); ImageIO.write(thumb, 'png', outStream); var thumbBytes = outStream.toByteArray(); return Base64.getEncoder().encodeToString(thumbBytes); } catch (e) { return ""; } } // 6. Bilder einzeln verarbeiten for (var idx = 0; idx < base64Imgs.length; idx++) { try { // Wenn hochste_medien_id 0 ist, beginnen wir mit 1, sonst hochste_medien_id + 1 var newMedienNum = hochste_medien_id === 0 ? idx + 1 : hochste_medien_id + idx + 1; var newMedienId = "" + newMedienNum; var base64String = base64Imgs[idx]; var thumbnailString = ""; try { thumbnailString = makeThumbnail(base64String, 0.1); } catch (e) { // Fehler beim Thumbnail abfangen } // SQL-Statement erstellen state.medien_id = newMedienId; state.sql = "INSERT INTO [engomo].[dbo].[begehung_raume_medien] " + "(protokoll_id, raum_id, raum_bezeichnung, medien_id, medien_bild, medien_thumb, medien_beschreibung) " + "VALUES (" + "'" + protokoll_id + "', " + "'" + raum_id + "', " + "'" + raum_bezeichnung + "', " + "'" + newMedienId + "', " + "N'" + base64String + "', " + "N'" + thumbnailString + "', " + "N'" + medien_beschreibung_val + "'" + ");"; // SQL ausführen flowHelper.execute('dynamicSQL'); // Kurze Pause zwischen den Einfügungen java.lang.Thread.sleep(100); } catch (e) { // Bei Fehler fortfahren mit dem nächsten Bild continue; } } ```