Add engomo/javascript_base64_fotos.md
This commit is contained in:
115
engomo/javascript_base64_fotos.md
Normal file
115
engomo/javascript_base64_fotos.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user