[Frage] Datei Upload mit StorageRepository benennt Dateien um [Gelöst] TYPO3-Version: 7.6.22

  • 0 x
    66 Beiträge
    1 Hilfreiche Beiträge
    14. 11. 2017, 11:25

    Hallo,
    Versuche mit gerade an einem eigenen Datei Upload.

    1. public function saveFormAction() {
    2. $newPDFPath = 'user_upload/User_Dateien/'.$GLOBALS['TSFE']->fe_user->user['username'].'/';
    3. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($_FILES);
    4. //var_Dump($_FILES['tx_usercontrol_user_control_usercreatetext']['name']['formpdf'][0]);
    5. var_Dump($_FILES['tx_usercontrol_user_control_usercreatetext']['type']['formpdf'][0] == 'application/pdf');
    6. var_Dump($_FILES['tx_usercontrol_user_control_usercreatetext']['name']['formpdf'][0] and $_FILES['tx_usercontrol_user_control_usercreatetext']['type']['formpdf'][0] == 'application/pdf');
    7. if ($_FILES['tx_usercontrol_user_control_usercreatetext']['name']['formpdf'][0] and $_FILES['tx_usercontrol_user_control_usercreatetext']['type']['formpdf'][0] == 'application/pdf') {
    8.  
    9. //be careful - you should validate the file type! This is not included here
    10. $tmpName = $_FILES['tx_usercontrol_user_control_usercreatetext']['name']['formpdf'][0];
    11. $tmpFile = $_FILES['tx_usercontrol_user_control_usercreatetext']['tmp_name']['formpdf'][0];
    12.  
    13. $storageRepository = $this->objectManager->get('TYPO3\\CMS\\Core\\Resource\\StorageRepository');
    14. $storage = $storageRepository->findByUid('1'); //this is the fileadmin storage
    15. //build the new storage folder
    16. if(!$storage->hasFolder($newPDFPath)){
    17. $targetFolder = $storage->createFolder($newPDFPath);
    18. }
    19. else {
    20. $targetFolder = $storage->getFolder($newPDFPath); //getFolder steht zwar nicht in der API, Funktioniert aber im Gegenzug zu anderen Methoden, die in der API stehen. :/
    21. }
    22. $newFileName = $tmpName;
    23. $Path=$newPDFPath.$tmpName;
    24. var_Dump($storage->hasFile($Path));
    25. var_Dump($tmpFile);
    26. $movedNewFile = $storage->addFile($tmpFile, $targetFolder, $newFileName);
    27. }

    Nunja, eine Datei mit Namen: „Ich bin eine Datei.pdf“
    Wird zu: „ich_bin_eine_datei.pdf“
    Des Weiteren erzeugt die Methode addFile Kopien einer Datei, wenn der Name bereits Existiert.
    „ich_bin_eine_datei01.pdf“ usw…
    Wie bekomme ich ihn jetzt dazu, die Datei Richtig zu benennen, und statt eine Kopie anzulegen einen Error ausgibt?
    hasFile Funktioniert leider nicht, da die Datei im Ordner ja anderes heißt, und wenn er anfängt kopieren anzulegen findet er natürlich nichts mehr, und gibt einfach FALSE zurück…
    Die API Doku ist fast nicht zu gebrauchen, in der Doku steht return Folder, es wird aber ein String zurückgegen, genauso wenn Parameter String dasteht, will er einen Folder, usw. Die Beschreibung von addFile will 3 x String, wenn ich ihr aber 3 Strings gebe, meckert er, das er einen Folder möchte…usw..
    https://api.typo3.org/typo3cms/7/html/class_t_y_p_o3_1_1_c_m_s_1_1_core_1_1_resource_1_1_folder.html
    Ich Orientiere mich nach dieser Anleitung:
    http://t3-developer.com/1/ext-programmierung/techniken-in-extensions/fal-dateiupload-im-frontend/
    //build the new storage folder
    $targetFolder = $storage->createFolder($newImagePath);
    Ist zwar eine schöne Methode, leider liefert sie Oops, an Error usw, wenn der Order bereits existiert… Hat sich hier so viel geändert an der Classe?
    Hoffentlich habt ihr noch eine Idee.
    Schon mal Danke für eine Antwort
    Mfg
    Power-Poler

  • 0 x
    66 Beiträge
    1 Hilfreiche Beiträge
    14. 11. 2017, 14:21 - Lösung

    Habe die Falsche Classe verwendet, es ist diese:
    https://api.typo3.org/typo3cms/7/html/class_t_y_p_o3_1_1_c_m_s_1_1_core_1_1_resource_1_1_resource_storage.html

    Groß und Kleinschreibung ist ebenfalls gelöst, Filelist->fileadmin(rechtsklick)->Edit->Configuration->"Use case sensetive identifiers"
    Nur diese verdammten Unterstriche habe ich noch nicht weg bekommen.
    Sollte aber auch keine Rolle mehr spielen.
    In der Doku wurde die Methode addFile richtig Erklärt, und ich konnte anstatt Rename, Replace eintragen:
    $movedNewFile = $storage->addFile($tmpFile, $targetFolder, $newFileName, \TYPO3\CMS\Core\Resource\DuplicationBehavior::REPLACE);


  • 1
  • 0 x
    66 Beiträge
    1 Hilfreiche Beiträge
    14. 11. 2017, 14:21

    Habe die Falsche Classe verwendet, es ist diese:
    https://api.typo3.org/typo3cms/7/html/class_t_y_p_o3_1_1_c_m_s_1_1_core_1_1_resource_1_1_resource_storage.html

    Groß und Kleinschreibung ist ebenfalls gelöst, Filelist->fileadmin(rechtsklick)->Edit->Configuration->"Use case sensetive identifiers"
    Nur diese verdammten Unterstriche habe ich noch nicht weg bekommen.
    Sollte aber auch keine Rolle mehr spielen.
    In der Doku wurde die Methode addFile richtig Erklärt, und ich konnte anstatt Rename, Replace eintragen:
    $movedNewFile = $storage->addFile($tmpFile, $targetFolder, $newFileName, \TYPO3\CMS\Core\Resource\DuplicationBehavior::REPLACE);

  • Norman2k Norman2k
    Jedi-General
    0 x
    1567 Beiträge
    62 Hilfreiche Beiträge
    14. 11. 2017, 18:00

    Nur mal so aus Interesse, wieso ist es dir so wichtig, dass der Dateiname erhalten bleibt? Wenn ich manchmal sehe, was Kunden für fiese Zeichen in Dateinamen haben, bin ich sehr glücklich darüber, dass TYPO3 mir die Arbeit abnimmt, solche Zeichen raus zu filtern ;)

  • 0 x
    66 Beiträge
    1 Hilfreiche Beiträge
    15. 11. 2017, 08:14

    War da noch der Meinung, dass ich Prüfen müsste, ob die Datei bereits existiert, und wenn die Datei anderes im Ordner benannt ist, wird die Prüfung immer auf FALSE hinauslaufen.
    Durch die richtige Classen Doku und REPLACE konnte ich das ja alles Typo3 überlassen.
    Groß und Kleinschreibung ist aber sicher nicht das Problem bei der Dateibenennung, wenn er nun weiterhin Sonderzeichen und Blödsinn rausfillter ist es in Ordnung.

  • 1