Zum Inhalt

Dateihandling im Contentfly CMS

Allgemein

Ordnerstruktur und Dateiablage

Alle über das User Interface oder die API hochgeladenen Dateien werden in folgender Ordnerstruktur abgelegt:

  • data
    • files
      • FILE_ID
        • FILENAME.EXT

Bei jedem Upload wird ein Datenbankeintrag in der Tabelle pim_files (bzw. der Entität Areanet\PIM\Entity\File) erstellt, in dem die ID, der Original-Dateiname und weitere Metadaten wie Hash-Wert, Dateityp, Größe, etc. abgespeichert wird. Anhand der generierten ID wird ein gleichnamiger Ordner unter data/files angelegt und dort die hochgeladene Datei mit dem Originalnamen abgelegt.

Dublettenprüfung

Im Standard findet keine Dublettenprüfung statt. Bei jedem Upload wird ein neues Objekt von Areanet\PIM\Entity\File und ein neuer Ordner unter data/files abgelegt. Anhand eines Hash-Wertes der Datei können Sie gleiche Dateien anhand des Inhaltes (unabhängig vom Dateinamen) nur einmalig anlegen lassen. Setzen Sie dazudie Konfigurationsvariable FILE_HASH_MUST_UNIQUE auf true (im Standard steht diese auf false):

custom/config.php

1
2
<?php
$configDefault->FILE_HASH_MUST_UNIQUE = true;

Dateiabruf

Dateien können über die File-API entsprechend abgerufen werden. Im Standard erfolgt die Rückgabe über die readfile-Methode, da sich das data-Verzeichnis außerhalb des Webroot befindet. Sollte auf Ihrem Webserver die Erweiterung x_sendfile installiert sein, können Sie dies aus Performance-Gründen aktivieren.

File-Processing

Bei jedem Dateiupload wird anhand des Mime-Typs eine entsprechende Bearbeitungsfunktion angestoßen, um automatisch z.B. Thumbnails von Bilddateien zu erstellen.

Standard-Bildverarbeitung

Beim Upload oder Abruf von Bildern werden automatisch folgende Systemgrößen als Varianten unter dem Namen SIZENAME-FILENAME.EXT im entsprechenden Dateiordner abgelegt:

  • pim_list: 200x200 Pixel, skaliert und zugeschnitten
  • pim_small: 320 Pixel Breite, skaliert

Beispiel

  • data
    • files
      • 209
        • sonnenuntergang.jpg
        • pim_list-sonnenuntergang.jpg
        • pim_small-sonnenuntergang.jpg

Weitere benutzerdefinierte Bildgrößen können Sie als Administrator im User Interface unter Administration->Bildgrößen anlegen.

Info

Sobald Sie eine Eigenschaft bei den Bildgrößen verändern, wird das entsprechende Bild beim ersten Aufruf automatisch neu berechnet/skaliert. Die automatische Bildverarbeitung funktioniert derzeit nur für JPEG-, PNG- oder GIF-Bilder über die GdLib.

Benutzerdefinierte Dateiverarbeitung

Im Standard ist lediglich der GdLib-Processor aktivert, der alle oben unterstützten Bildtypen verarbeitet. Einen benutzerdefinierten Datei-Prozessor können Sie wie folgt hinzufügen:

custom/config.php

1
2
<?php
$configDefault->FILE_PROCESSORS = array('\Areanet\PIM\Classes\File\Processing\Image', 'Custom\Classes\File\Processing\PDF');

custom/Classes//File/Processing/PDF.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
<?php
namespace Custom\\Classes\File\Processing;

use Areanet\PIM\Classes\Config\Adapter;
use Areanet\PIM\Classes\File\ProcessingInterface;
use Areanet\PIM\Classes\File\BackendInterface;
use Areanet\PIM\Entity\File;
use Areanet\PIM\Entity\ThumbnailSetting;

class PDF implements ProcessingInterface
{


    function __construct(){

    }

    public function registerImageSize(ThumbnailSetting $thumbnailSetting){
        //Optionale Speicherung der im System registrierten Bildgrößen in einem Array
    }

    public function getMimeTypes()
    {
        //Auf welche Mime-Typen spricht der Datei-Prozessor an
        return array('application/pdf');
    }

    public function execute(BackendInterface $backend, File $fileObject, $fileSizeAlias = null, $variant = null)
    {

        $uploadedFile  = $backend->getPath($fileObject).'/'.$fileObject->getName();
        //Dateiverarbeitung durchführen
        //...
    }
}

In getMimeTypes werden die Mime-Typen definiert, für den die Dateiverarbeitung gelten/ausgeführt werden soll. In der execute-Methode wird die entsprechende Dateiverarbeitung durchgeführt. Es könnten beispielsweise auch nur Metadaten aus einer PDF-Datei gelesen und in die Datenbank geschrieben werden - ohne Veränderung der Originaldatei.

Achtung: Nur 1 Dateiprozessor pro Mime-Typ möglich

Im System kann nur ein Dateiprozessor pro Mime-Typ aktiv sein. Sollte im obigen Beispiel "image/jpeg" zusätzlich angegeben sein, würde der PDF-Dateiprozessor die Dateiverarbeitung für JPEG-Dateien aus dem vorgelagerten Standard-Prozessor \Areanet\PIM\Classes\File\Processing\Image übernehmen/überschreiben.