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;
}

 

 

Previous PostLinux Tutorial: MQTT Broker Installation und Konfiguration
Next PostTYPO3 Extbase Tutorial: Einem FE-Plugin neue Felder geben und im Frontend verarbeiten