我正在创建typo3扩展开发。我们有文件上传我很困惑上传目录和要在控制器中写入的代码。我知道流体的形式代码,但控制器代码我不知道。所以寻求帮助
答案 0 :(得分:4)
如果您想以正确的方式进行,您应该使用FAL进行文件上传,而不是完全自己处理。关于使用Helmut Hummel的Extbase进行FAL上传的详细帖子,可以找到here。
Helmut还提供了一个演示扩展作为概念证明,可在Github找到。
答案 1 :(得分:-3)
来自Helmut Hummel的例子适用于Typo3 6.2但不适用于8.x及更高版本。删除方法的原因在他自己的UploadViewHelper中调用 getValue(false)。
另一种方式,没有自己的FileReference,就是使用FileAbstractionLayer上传文件如下。
前端: 为您的模型类创建一个表单。 注意:表单需要属性 method =" post" ENCTYPE ="多部分/格式数据" 强>
<f:form action="addDownloadItem" method="post" enctype="multipart/form-data" object="{newDownloadItem}" name="newDownloadItem">
<input type="file" property="file" name="datei">
</f:form>
在您的控制器操作中,编写以下代码:
public function addDownloadItemAction(DownloadItem $newDownloadItem, SubCategory $subCategory){
$file = $_FILES['datei'];
$storage = $this->storageRepository->findAll()[0];
$fileObject = $storage->addFile($file['tmp_name'], $storage->getDefaultFolder(), $file['name']);
$fileObject = $storage->getFile($fileObject->getIdentifier());
$this->downloadItemRepository->add($newDownloadItem);
$fileResourceReference = new \TYPO3\CMS\Core\Resource\FileReference(array('uid_local' => $fileObject->getUid()));
/** @var \TYPO3\CMS\Extbase\Domain\Model\FileReference $fileSysReference */
$fileSysReference = $this->objectManager->get(\TYPO3\CMS\Extbase\Domain\Model\FileReference::class);
$fileSysReference->setOriginalResource($fileResourceReference);
$fileSysReference->setPid($this->storagePid);
$newDownloadItem->setFile($fileSysReference);
$subCategory->addDownloadItem($newDownloadItem);
$this->subCategoryRepository->add($subCategory);
}
现在让我们看一下模型类:
class DownloadItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* file
*
* @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
*/
protected $file = NULL;
...
TCA应如下所示:
'file' => array(
'exclude' => 1,
'label' => 'LLL:EXT:<<extKey>>/Resources/Private/Language/locallang_db.xlf:tx_<<extKey>>_domain_model_downloaditem.file',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'file',
array('maxitems' => 1,
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:media.addFileReference'
),
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
)
),
'foreign_match_fields' => array(
'tablenames' => 'tx_<<extKey>>_domain_model_downloaditem',
),
)
),
),
注意:您可以更改文件类型 foreign_types ,但重要的部分是:
'foreign_match_fields' => array(
'tablenames' => 'tx_<<extKey>>_domain_model_downloaditem',
),
表名必须是模型表的名称。
备注:强>