我的想法是使用
选择文件,然后从文件中创建\ TYPO3 \ CMS \ Extbase \ Domain \ Model \ FileReference以存储在我的扩展程序中。
我找到了很多文件上传的例子,但是我没有必要上传文件,只是选择并创建它的FileReference。
有人可以给我一个简单的例子吗?
如果我能理解,f:form.upload属性文件的数据结构如何显示也会有帮助吗?
这是我的代码示例,缺少:
<f:form action="update" name="recipe" object="{recipe}" enctype="multipart/form-data" >
<f:form.upload property="file" />
<f:form.submit value="Save" /> </f:form>
答案 0 :(得分:0)
我在最近的TYPO3 7.5.15项目中使用了以下方法。我创建了一个自定义FileReference模型
模特:
namespace Vendor\ExtKey\Domain\Model;
class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder {
/**
* Uid of the referenced sys_file. Needed for extbase to serialize the
* reference correctly.
*
* @var int
*/
protected $uidLocal;
/**
* @var string
*/
protected $tablenames = 'yourTableName';
/**
* @param \TYPO3\CMS\Core\Resource\ResourceInterface $originalResource
*/
public function setOriginalResource(\TYPO3\CMS\Core\Resource\ResourceInterface $originalResource) {
$this->originalResource = $originalResource;
$this->uidLocal = (int)$originalResource->getUid();
}
/**
* @return \TYPO3\CMS\Core\Resource\FileReference
*/
public function getOriginalResource() {
if($this->originalResource === NULL) {
$this->originalResource = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getFileReferenceObject(
$this->getUid()
);
}
return $this->originalResource;
}
/**
* @return string
*/
public function getTablenames() {
return $this->tablenames;
}
/**
* @param string $tablenames
*/
public function setTablenames($tablenames) {
$this->tablenames = $tablenames;
}
}
通过调用
在控制器中创建一个新的FileReference$fileReference = $this->_uploadFalFile($fileName, $fileRelativePath, $newFileAbsolutePath . $newFileFileName);
使用方法:
/**
* @param $fileName
* @param $target
* @param $targetFilePath
*
* @return \Ventor\ExtKey\Domain\Model\FileReference
*/
protected function _uploadFalFile($fileName ,$target, $targetFilePath) {
$storageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\StorageRepository');
$newFileReference = new \Vendor\ExtKey\Domain\Model\FileReference();
/** @var \TYPO3\CMS\Core\Resource\ResourceStorage $storage */
$storage = $storageRepository->findByUid(1);
$saveFolder = $storage->getFolder($target);
$fileObject = $storage->addFile($targetFilePath, $saveFolder, $fileName);
$newFileReference->setOriginalResource($fileObject);
return $newFileReference;
}
使用的存储uid取决于您在设置中配置的存储。 1将是自动创建的fileadmin。但您可以在TYPO3后端轻松创建新存储,并使用该存储的uid来存储文件。只需更改行
即可$storage = $storageRepository->findByUid(1);
满足您的需求或使存储uid成为从配置中传出的变量。