This extension implements a child class of FileReference and a helper with some convenience methods to help you creating a new FileReference for your model.
Install extension and add its static TypoScript template to your template.
Add both parts as usual, nothing special here. Example for adding a field named "image":
TCA:
'image' => [ 'label' => 'LLL:my_extension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_mymodel.image', 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( 'image', [ 'maxitems' => 1, 'foreign_match_fields' => [ 'fieldname' => 'image', 'tablenames' => 'tx_myextension_domain_model_mymodel', 'table_local' => 'sys_file', ], ], 'jpg,jpeg,png' ) ]
Model:
/** * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference */ protected $image = null; /** * Get image. * * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference */ public function getImage() { return $this->image; } /** * Set image. * * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image */ public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image) { $this->image = $image; }
In e.g. your controller, you may now use the FileReferenceHelper to move a locally available file to a specific location, returning the resulting FileReference.
Example of handling an upload:
$myObject = $this->myRepository->findOneByUid($uid); if ($_FILES['image'] && $_FILES['image']['size'] > 0) { $tmpName = $_FILES['image']['name']; $tmpFile = $_FILES['image']['tmp_name']; // Get the helper itself. $fileReferenceHelper = $this->objectManager->get(\Akb\FileReference\Helper\FileReferenceHelper::class); // Just a convenience method to make sure, it won't result in multiple images // where only one is allowed $fileReferenceHelper->removeFileReferenceIfEmpty($myObject, "image"); // 3rd parameter must be a folder within your default storage. $fileReference = $fileReferenceHelper->fileToFileReference($tmpFile, $tmpName, "images"); // As you now have a valid file reference, just add it. $myObject->setImage($fileReference); }
- Storage handling defaults to your default storage and has no special handling for sub folders.