Files
Morgenstern/engomo/javascript_base64_fotos.md

115 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. JavaTypen 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 MedienID 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. Base64Bilder 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. ZustandsVariablen
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;
}
}
```