Search the FirstSpirit Knowledge Base
Hallo zusammen,
Ausgangsproblem:
wir haben in unserem MediaStore einige zehntausend Bilder und möchten einen kleinen, definierten Teil hiervon automatisiert aktualisieren. Hintergrund ist, dass einige hundert Bilder in zu großen Auflösungen vorliegen und unnötig Speicherplatz fressen. Ein skriptgesteuerter Auftrag soll diese finden, die Bilder holen, ein rescaling vornehmen und dann die Bilder im Store erneuern. Besonderheit: es handelt sich um die Originalauflösung (Resolution = ORIGINAL), die aktualisiert werden muss.
Das finden und ändern der Auflösung stellt kein Problem dar. Nun bin ich jedoch beim Aktualisieren der Bilder, was leider fehlschlägt. Den Grund liefert folgende mehr oder weniger aussagekräfte Exception:
Caused by: java.lang.UnsupportedOperationException: lock is not supported for release store elements
Um folgenden Code geht es:
for (imgUid : originalImages600x800) {
medium = ms.getStoreElement(imgUid, IDProvider.UidType.MEDIASTORE_LEAF);
pic = medium.getMediaContent(lang);
extension = pic.getPictureMetaData(originalRes).getExtension();
medium.setLock(true, false);
file = new File(systemScaledImagesFolder + imgUid + "." + extension);
fileInputStream = new FileInputStream(file);
pic.removePicture(originalRes);
pic.setPicture(originalRes, file.length(), fileInputStream, extension);
medium.setParseFile(false);
medium.save("resized to 450x600 by schedule", false);
medium.setLock(false, false);
medium.release(false);
context.logInfo("medium '" + imgUid + "' successfully saved back with lower resolution!");
}
Fettgedruckt die Zeile, die knallt. Was läuft hier verkehrt? Ich weiß, dass ich an dieser Stelle wohl etwas ganz Grundlegendes bzgl des "Release Store" falsch verstehe - das Problem ist, dass ich nicht recht weiß, was das überhaupt ist.....
Server-Version: 4.2.219.38784
Skript greift über eigene Admin-Connection zu.
Hallo Herr Weber,
> * Wie hole ich das Bild - angelehnt am obigen Code zB - denn im 'current' Stand??
Gute Frage, da der entsprechende Teil in dem obigen Codeausschnitt fehlt
Sie haben sich "ms" wahrscheinlich mittels UserService.getStore(MediaStore.type, true) bzw. UserService.getStore(MediaStore.type, true, true) geholt. Verwenden Sie statt dessen UserService.getStore(MediaStore.type, false) bzw. UserService.getStore(MediaStore.type, true, false).
Viele Grüsse aus Dortmund,
Holger Höbbel
Hallo Herr Weber,
zwei Anmerkungen zu Ihrer Anfrage:
- Der Fehler stammt daher, dass Sie sich das Bild im Freigabestand (release) geholt haben. Dieser kann nicht geändert werden.
Lösung: Das Bild aus dem aktuellen (current) Stand holen, dort ändern und dann freigeben, um es auch im Freigabestand zu ändern
- Das Ganze ist, sofern Sie anschließend keine Archivierung durchführen, kontraproduktiv! Die Bilder in den alten Auflösungen bleiben natürlich im Repository gespeichert und die neuen Bilder kommen hinzu, wodurch insgesamt erst einmal mehr Platz benötigt wird, als wenn Sie die Aktion nicht durchführen würden.
Erst wenn Sie die nicht mehr benötigten Revisionen aus dem Projekt archivieren, wird der Platzbedarf des Projektes schrumpfen.
Viele Grüsse aus Dortmund,
Holger Höbbel
Hallo Herr Höbbel,
vielen Dank für Ihre Antwort!
* Wie hole ich das Bild - angelehnt am obigen Code zB - denn im 'current' Stand??
* Archivierung ist bereits aktiviert und die läuft gut. Das war vielleicht etwas missverständlich formuliert, aber es geht nicht um den Speicherplatz im CMS-Repository, sondern um den konkreten Plattenplatz auf dem Bilderserver der Frontendserver, auf dem die Medien des MediaStore gesynct werden...
Hallo Herr Weber,
> * Wie hole ich das Bild - angelehnt am obigen Code zB - denn im 'current' Stand??
Gute Frage, da der entsprechende Teil in dem obigen Codeausschnitt fehlt
Sie haben sich "ms" wahrscheinlich mittels UserService.getStore(MediaStore.type, true) bzw. UserService.getStore(MediaStore.type, true, true) geholt. Verwenden Sie statt dessen UserService.getStore(MediaStore.type, false) bzw. UserService.getStore(MediaStore.type, true, false).
Viele Grüsse aus Dortmund,
Holger Höbbel
in der Tat, genau das war das Problem.
ach wie schön wäre doch ein beanshell-oberfläche mit ein weeenig mehr bequemlichkeit und vielleicht ein wenig code assistance oder vielleicht syntax highlighting? man gerät doch sehr leicht in copy-paste-fallen.
danke auf jeden fall!!