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:

   
   
	

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.