Typo3 从fileadmin下的现有文件创建FileReference

Typo3 从fileadmin下的现有文件创建FileReference,typo3,Typo3,我的想法是使用 选择一个文件,然后从该文件创建\TYPO3\CMS\Extbase\Domain\Model\FileReference以存储在我的扩展名中 我发现了很多文件上传的例子,但我不需要上传文件,只需要选择并创建一个文件引用 有人能给我举个简单的例子吗 如果我能理解f:form.upload属性文件的数据结构是什么样子的,这也会很有帮助 下面是缺少的代码示例: <f:form action="update" name="recipe" object="{recipe}" enc

我的想法是使用

选择一个文件,然后从该文件创建\TYPO3\CMS\Extbase\Domain\Model\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>

我在最近的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 = $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成为配置中的变量。

这里是我的代码示例,缺少: