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