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,
  ];
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.