我正在创建typo3扩展开发。在那我们有文件上传我很困惑,关于上传目录和代码写在controller.i知道流体的形式代码ie但控制器代码我不知道。所以寻求帮助基于typo3流体的后端扩展文件上传控制器代码
0
A
回答
3
-2
Helmut Hummel的示例适用于Typo3 6.2,但不适用于8.x及更高版本。在自己的UploadViewHelper中删除方法调用的原因如getValue(false)。
另一种没有自己的FileReference的方式是使用FileAbstractionLayer上传文件如下。
前端: 为您的模型类创建一个表单。 注:表格需要的属性方法= “邮报” ENCTYPE = “的multipart/form-data的”
<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',
),
的表名必须是你的模型表的名称。
注:
- 现在你已经保存在默认文件夹中的文件。 如果您想要其他文件夹,请将参数$ storage-> getDefaultFolder()更改为您自己的文件夹。
- 如果你想创建一个在前端使用的文件下载链接:在标签
相关问题
- 1. TYPO3 6.2后端扩展
- 2. TYPO3:从扩展php代码
- 3. TYPO3 Extbase扩展:后端FAL上传失败
- 4. 如何在TYPO3 extbase扩展控制器中打开文件?
- 5. 后端扩展中的Typo3 Ajax
- 6. TYPO3:后端模块和前端插件的扩展
- 7. 控制扩展器控制扩展量
- 8. TYPO3扩展“新闻”:流体模板上的自定义字段
- 9. TYPO3:在TER中上传我的扩展
- 10. TYPO3上传文件的前端插件
- 11. TYPO3 shibboleth_auth替代和扩展定制
- 12. 升级后typo3 awstats扩展更改上传文件夹的散列
- 13. 如何在后面的代码中获取上传文件的扩展名?
- 14. TYPO3 IRRE流体前端
- 15. 将文件上传控制文件名传递到文件流
- 16. TYPO3:在后端模块中上传
- 17. 基于浏览器的文件上传到AWS S3并编码服务器 - 客户端工作流程
- 18. 关于扩展源代码
- 19. 基于TCP端口匹配TCP流Ryu控制器
- 20. 从另一个扩展渲染TYPO3流体部分
- 21. TYPO3:另一个控制器的后端模块链接动作
- 22. TYPO3:后端模块渲染另一个控制器的动作
- 23. Zend Framework - 扩展控制器
- 24. 扩展注解控制器
- 25. Symfony2:扩展FrameworkBundle控制器
- 26. 扩展codeigniters控制器
- 27. 在django表单文件上传中限制文件扩展名
- 28. 验证上传的文件扩展名
- 29. 扩展控制器组件 - angularjs
- 30. TYPO3-使用作曲家的控制台 - >将更改传播到扩展
不知道是谁删除我以前的评论的href {} downloadItem.file.originalResource.publicUrl,但再来一次。这个答案仍然不是100%正确的。 *在他自己的FileReference中删除方法调用的原因,如getValue(false)*该方法从未在FileReference对象中调用,但在UploadViewHelper中调用。对于TYPO3 7.6及更高版本,它自己的FileReference对象确实可以省略,但另一方面也不会造成危害。 – helhum 2016-12-07 16:35:40
除此之外,创建upload_example的重点在于教人们分离关注点,并且不**在控制器中执行属性映射(处理文件上载),而是使用属性映射基础结构(请参阅链接博客文章在接受的答案)。 – helhum 2016-12-07 16:36:22
我在代码中做了一些修改。在测试之前,请不要低估我的例子。我已经在您的存储库中写了一个问题,但您至今尚未回答。你的例子目前dosn't没有与错字8.x多数民众赞成多数民众赞成我点写这个例子 – 2016-12-07 16:49:33