基于typo3流体的后端扩展文件上传控制器代码

时间:2014-12-07 17:19:37

标签: file-upload typo3 backend

我正在创建typo3扩展开发。我们有文件上传我很困惑上传目录和要在控制器中写入的代码。我知道流体的形式代码,但控制器代码我不知道。所以寻求帮助

2 个答案:

答案 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',
            ),

表名必须是模型表的名称。

备注:

  1. 现在您已将文件保存在默认文件夹中。 如果您想要其他文件夹,请将参数$ storage-&gt; getDefaultFolder()更改为您自己的文件夹。
  2. 如果要在前端使用中创建文件的下载链接:标记的href中的{downloadItem.file.originalResource.publicUrl}