nilsweber
I'm new here

Medien im MediaStore über Skript aktualisieren

Jump to solution

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.

1 Solution

Accepted Solutions

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 Smiley Wink

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

View solution in original post

4 Replies
hoebbel
Crownpeak employee

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...

0 Kudos

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 Smiley Wink

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? Smiley Wink  man gerät doch sehr leicht in copy-paste-fallen.

danke auf jeden fall!!

0 Kudos