Mit dieser fertigen Methode generieren Sie schnell und einfach auf Basis eines Dateipfades (/fileadmin/user_upload/image.png) eine FileReference.

Extbase Snippet für FileReference

Folgende Use-Statements werden genutzt:

 

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Core\Resource\StorageRepository;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;

 

Hier die eigentliche Methode, direkt einsatzbereit:

 

/**
* Generates a FileReference based on an absolute filepath
*
* @param string $filepath Filepath
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference Generated FileReference Object
*/
private function generateFileReference(string $filepath): \TYPO3\CMS\Extbase\Domain\Model\FileReference {

  $pathInfo = pathinfo($filepath);

  $folderpath = $pathInfo['dirname'] . '/';
  $filename = $pathInfo['basename'];

  if (strpos($folderpath, 'fileadmin') !== false) {
  $folderpath = str_replace('fileadmin', '', $folderpath);
  }

  $storageRepository = GeneralUtility::makeInstance(StorageRepository::class);
  $defaultStorage = $storageRepository->getDefaultStorage();

  $folder = $defaultStorage->getFolder($folderpath);
  $file = $folder->getStorage()->getFileInFolder(basename($filename), $folder);

  // Use the ResourceFactory to create a FileReference
  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
  $coreFileReference = $resourceFactory->createFileReferenceObject([
  'uid_local' => $file->getUid(),
  'table_local' => 'sys_file',
  ]);

  // Create an Extbase FileReference and set the OriginalResource to the Core FileReference
  $fileRef = new \TYPO3\CMS\Extbase\Domain\Model\FileReference();
  $fileRef->setOriginalResource($coreFileReference);

  return $fileRef;
}

Wichtig: Zu beachten

Die Bildpfade dürfen nicht außerhalb des Drivers in einem Ordner sein (z.B. in einem Extension Ordner). Das heißt: Pfade wie typo3conf/ext/MeineExt/Resources/Public/Images würde nicht so einfach möglich sein mit dem obigen Code.

Der Bildpfad, der an die Funktion übergeben wird, darf nicht fileadmin im Pfad haben. Fileadmin ist in den meisten Fällen der Driver. Nur Ordner darin werden berücksichtigt. Daher macht es Sinn z.B: mit substr(); den Pfad ab Fileadmin nach links zu entfernen.

Zum Schluss können wir die Filereference für unser Model nutzen:

 

$image1FileReference = $this->generateFileReference($cutImageName);
$jobObject->setImage1($image1FileReference);

 

 

Previous PostSCSS Tutorial: Responsive Aspect-Ratios (16:9) für DIVs
Next PostTYPO3 Extbase: BackendModule in V12 JavaScript und Stylesheets einbinden