Datei-Upload in eigenem Typo3 Backend Module

Zum Upload einer Datei im Backend oder Frontend von Typo3 8+ hilft die ExtendedFileUtility mit ein paar schönen Methoden.

Für Suchmaschinen: Upload einer Datei in eigenem Backend-Module von Typo3. Upload file in typo3 backend module. File-Upload Typo3 backend, move_uploaded_file() in Mod-Controller. Typo3 ExtendedFileUtility upload example. TYPO3\CMS\Core\Utility\File\ExtendedFileUtility::init(). Upload files in TYPO3 from Frontend. Datei vom Frontend hochladen und im Controller an Ort bewegen. Typo3 upload file data. f:form.upload nutzen zum Upload einer Datei aus dem Backend oder Frontend.

Fluid-Template mit Formular zum Upload der Datei:

<f:form action="import" enctype="multipart/form-data">
   <f:form.upload name="file" />
   <f:form.submit />
</f:form>

Auszug aus dem ModController zum Empfangen der Datei und Speichern im Verzeichnis fileadmin/_temp_

/**
* action import Excel
*
* @return array
*/
public function importAction() {
 
$data = [];
$namespace = key($_FILES);
$targetFalDirectory = '1:/_temp_/';
 
$this->registerUploadField($data, $namespace, 'file', $targetFalDirectory);    
 
$fileProcessor = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Utility\\File\\ExtendedFileUtility');
$fileProcessor->setActionPermissions();
$fileProcessor->start($data);
$fileProcessor->setExistingFilesConflictMode(\TYPO3\CMS\Core\Resource\DuplicationBehavior::REPLACE);  
 
$result = $fileProcessor->processData();
 
foreach ($result['upload'] as $files) {
$file = $files[0];
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($file);
}
 
return $file;
}
 
 
/**
* @param array &$data
* @param string $namespace
* @param string $fieldName
* @param string $targetDirectory
* @return void
*/
protected function registerUploadField(array &$data, $namespace, $fieldName, $targetDirectory = '1:/_temp_/') {
if (!isset($data['upload'])) {
$data['upload'] = [];
}
$counter = count($data['upload']) + 1;
 
$keys = array_keys($_FILES[$namespace]);
foreach ($keys as $key) {
$_FILES['upload_' . $counter][$key] = $_FILES[$namespace][$key][$fieldName];
}
$data['upload'][$counter] = [
'data' => $counter,
'target' => $targetDirectory,
];
}