[英]How to access uploaded files in frontend in the controller in Typo3?
在typo3中,我使用扩展程序构建器为人员创建了一个域模型。 属性之一应该是个人资料图片。 我需要一些有关如何将上传的文件传递到控制器的帮助。
用于创建,编辑的表单如下所示:
<f:form action="update" arguments="{picture:picture}" name="person" object="{person}" >
<f:form.upload name="picture" class="imageupload" />
<f:form.textfield property="firstName" />
<f:form.textfield property="lastName" />
<f:form.submit value="Save" />
控制器中的更新操作:
public function updateAction(\Vendor\Persons\Domain\Model\Person $person, $picture) {
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$storage = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getDefaultStorage();
$file = $storage->getFolder('images')->addFile($picture);
$fileReference = $objectManager->get(\Vendor\Persons\Domain\Model\FileReference::class);
$fileReference->setFile($file);
$person->setPicture($fileReference);
$this->personRepository->update($person);
}
FileReference类:
class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference {
/**
* uid of a sys_file
*
* @var integer
*/
protected $originalFileIdentifier;
/**
* setOriginalResource
*
* @param \TYPO3\CMS\Core\Resource\FileReference $originalResource
* @return void
*/
public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource) {
$this->originalResource = $originalResource;
$this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid();
}
/**
* setFile
*
* @param \TYPO3\CMS\Core\Resource\File $falFile
* @return void
*/
public function setFile(\TYPO3\CMS\Core\Resource\File $falFile) {
$this->originalFileIdentifier = (int)$falFile->getUid();
}
}
当我只是在update动作中在addFile()函数中对图像的路径进行硬编码时,一切似乎都正常了,文件被复制到fileadming并创建了文件引用。 但是我不知道如何从表单上传访问上传的图像。 我什至不确定图像是否全部上传了。
首先,您的表单需要设置为enctype="multipart/form-data"
。 这允许表单提交您上传的文件。
然后,您应该将属性更改为<f:form.upload property="picture.originalResource" class="imageupload" />
以自动将文件分配给图片参考。
如果您想自己处理上传,请查看以下我用于TYPO3 8.7的代码:
# Set target Folder
$mediaFolder = 'path/to/images';
$storage = $this->storageRepository->findByUid(1);
# check if target folder exist or create it
if ($storage->hasFolder($mediaFolder)) {
$targetFolder = $storage->getFolder($mediaFolder);
} else {
$targetFolder = $storage->createFolder($mediaFolder);
}
# add uploaded file
$imageFile = $targetFolder->addUploadedFile($picture, DuplicationBehavior::RENAME);
# FileReference is the instance of your extension
/** @var FileReference $imageFileReference */
$imageFileReference = $this->objectManager->get(FileReference::class);
$imageFileReference->setOriginalResource($imageFile);
$imageFileReference->setPid($person->getPid());
$person->setPicture($imageFileReference);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.