Zum Inhalt springen

Cookies đŸȘ

Cookies helfen uns, Ihnen als Nutzer in Zukunft bessere Informationen und eine verbesserte Benutzererfahrung zu bieten. Details

Projektanfrage

Sprechen wir ganz unverbindlich ĂŒber Ihr Projekt.

Oder nutzen Sie unser Kontaktformular
Laravel

Spatie Media Library: Originale löschen nach der Erstellung von Conversions

Delete Button.

Mit der Spatie Media Library fĂŒr Laravel ist es ein leichtes, Dateien mit Eloquent-Models zu verknĂŒpfen.

Sie unterstĂŒtzt das Anlegen von Conversions. Was aber, wenn das Originalbild nach der Erstellung der Conversions gelöscht werden soll (z.B. um Platz zu sparen).

Nach dem Upload von Dateien und der Erstellung von Conversion werden die Originale beibehalten. Dadurch können immer wieder neue, andere, Conversions generiert werden.

Wenn das Originalbild wirklich nicht mehr benötigt wird, kann ĂŒber das Event ConversionHasBeenCompleted reagiert werden und das Original gelöscht werden.

Erstellen Sie den Listener RemoveOriginalImageListener:

php artisan make:listener RemoveOriginalImageListener

ErgÀnzen Sie den Listener in EventServiceProvider

use Spatie\MediaLibrary\Conversions\Events\ConversionHasBeenCompleted;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

protected $listen = [
    ConversionHasBeenCompleted::class => [
        RemoveOriginalImageListener::class,
    ],
];

Die Implementierung von RemoveOriginalImageListener.
Im Listener wird geprĂŒft ob das Media-Item ĂŒber eine Conversion verfĂŒgt und diese dann gelöscht.

namespace App\Listeners;

use Spatie\MediaLibrary\MediaCollections\Events\MediaHasBeenAdded;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

class RemoveOriginalImageListener
{
    public function handle(MediaHasBeenAdded $event)
    {
        $media = $event->media;
        
        // Check if the media item has conversions
        if ($media->hasGeneratedConversion('your-conversion-name')) {
            // Remove the original file
            unlink($media->getPath());
        }
    }
}

Nachteile

Das Löschen des Originals fĂŒhrt dazu, dass die Medienbibliothek "denkt", dass das Bild nicht mehr existiert (was auch stimmt). Daher werden Hilfsfunktionen wie singleFile() nicht mehr funktionieren. Ein möglicher Workaround ist es, das Bild durch eine leere Datei oder einen Symlink zu einer der Konvertierungen zu ersetzen. Diese Variante könnte sich anbieten wenn man nur Speicherplatz sparen will. Dies ist jedoch eine sehr hakelige Lösung die nicht zu empfehlen ist.

Das Original zu löschen ist auch deswegen riskant weil spĂ€ter keine neue Konvertierungen gerendert werden können. FĂŒr jede Löschoperation gilt: Vergewissern Sie sich, dass Sie ĂŒber ein Backup verfĂŒgen oder absolut sicher sind, dass Sie das Originalbild nicht mehr benötigen.

Bevor Sie zu dieser Lösung greifen, sollten Sie sich generell fragen:

  • Kann der gesamte Prozess neu durchdacht und besser gestaltet werden, so dass dieser umstĂ€ndliche Ansatz nicht erforderlich ist?

  • Ist die Media-Library vielleicht nicht die richtige Lösung fĂŒr diesen Anwendungsfall? Vielleicht wĂ€re es in dieser speziellen Situation besser, nicht die Media-Library zu verwenden und diesen Teil selbst zu implementieren.

Bereit zu starten?

Sie benötigen individuelle Software um Ihre Prozesse zu beschleunigen oder Ihr Unternehmen zu digitalisieren? Dann sollten wir miteinander sprechen.

Termin vereinbaren Zum Kontaktformular