繁体   English   中英

如何在Typo3的控制器中访问前端中的上传文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM