Моя проблема заключалась в том, что файл был удален уже при обработке. Я перенаправил на другое действие в своем действии контроллера, и это запустило новый запрос.
$this->redirect('list', $import);
Файл будет удален из временного каталога в конце запроса, если он не был удален или переименован.
(https://www.php.net/manual/en/features.file-upload.post-method.php)
Способ загрузки файла не указан в TYPO3 c и может обрабатываться по-другому, см. ссылку выше.
- Вы также должны установить временный путь соответственно, см. Ссылку выше.
- типы файлов могут быть ограничены с помощью accept, например,
accept='text/csv'
Я использую это в бэкэнд-модуле. Работает следующий код.
Fluid
<f:form enctype="multipart/form-data" action="create" name="import" object="{import}" method="POST">
<f:form.upload name="file" property="file" />
<f:form.submit value="Submit" />
</f:form>
Класс модели: Import. php
class Import extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/** @var array */
protected $file = [];
/**
* @return array
*/
public function getFile()
{
return $this->file;
}
/**
* @param array $file
* @return void
*/
public function setFile(array $file)
{
$this->file = $file;
}
}
Контроллер createAction ()
/**
* @param Import $import
* @return void
*/
public function createAction(Import $import)
{
$file = $import->getFile();
if ($file) {
$path = $file['tmp_name'];
}
// ...
}
Действие вызывается с объектом Import, содержащим свойство файла с правильно заполненными метаданными, например,
['name'] = myfile.csv
['type'] = 'text/csv'
['tmp_name'] = '/tmp/hpGLv1E'
['error'] = 0
['size'] = 51550