[Frage] Ajax Image Upload - Speichern mit FAL TYPO3-Version: 6.2.7

  • metabolic119 metabolic...
    TYPO3-Anwärter
    0 x
    4 Beiträge
    0 Hilfreiche Beiträge
    09. 07. 2015, 12:43

    Hallo alle zusammen,

    Ich habe folgendes Problem:

    Ich habe beim fe_user ein Feld "Avatar" hinzugefügt und im Extensionbuilder als Feldtyp "Image" angegeben. Dass wird ja dann als FileReference behandelt.

    Nun habe ich mit dem pluploader einen ImageUpload gebaut, mit dem das file hochgeladen wird.
    Sieht so aus:

    1. /**
    2. * action uploadProfileImage
    3. *
    4. * @return void
    5. */
    6. public function uploadProfileImageAction() {
    7. $fileName = $_FILES['file']['name'];
    8. $storageRepository = $this->objectManager->get('TYPO3\\CMS\\Core\\Resource\\StorageRepository');
    9. $storage = $storageRepository->findByUid('1');
    10. $relativFolderPath = $this->settings['profileImageRelativPath'] . '/' . $GLOBALS['TSFE']->fe_user->user['uid'];
    11. $fullFolderPath = $this->settings['profileImageFullPath'] . '/' . $GLOBALS['TSFE']->fe_user->user['uid'];
    12. $absolutePath = PATH_site . $fullFolderPath;
    13. $targetFolder = '';
    14. if (!file_exists($absolutePath)) {
    15. $targetFolder = $storage->createFolder($relativFolderPath);
    16. } else {
    17. $targetFolder = $storage->getFolder($relativFolderPath);
    18. }
    19. $fileName = $this->uploadData($fileName, $fullFolderPath);
    20. $relativFilePath = $relativFolderPath . '/' . $fileName;
    21. if ($storage->hasFile($relativFilePath)) {
    22. $movedNewFile = $storage->getFile($relativFilePath);
    23. } else {
    24. $movedNewFile = $storage->addFile($relativFilePath, $targetFolder, $fileName);
    25. }
    26. $newFileReference = $this->objectManager->get('\\MY\\OWN\\MODEL\\FileReference');
    27. $newFileReference->setFile($movedNewFile);
    28. $userObject = $this->feUserRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']);
    29.  
    30. $userObject->setAvatar($newFileReference);
    31. $this->feUserRepository->update($userObject);
    32.  
    33. $persistenceManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager');
    34. $persistenceManager->persistAll();

    Das haut alles hin bis zum persistAll().
    Dort bekomme ich dann folgende Exception:
    "Table 'myextension.tx_EXTENSION_my_own_model_filereference' doesn't exist"

    Meine FileReference Klasse sieht so aus:
    Das habe ich in mehreren Threads so gesehen, dass man das so machen sollte.

    1. class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference{
    2. /**
    3.   * uid of a sys_file
    4.   *
    5.   * @var integer
    6.   */
    7. protected $originalFileIdentifier;
    8.  
    9. /**
    10.   * setOriginalResource
    11.   *
    12.   * @param \TYPO3\CMS\Core\Resource\FileReference $originalResource
    13.   * @return void
    14.   */
    15. public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource) {
    16. $this->originalResource = $originalResource;
    17. $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid();
    18. }
    19.  
    20. /**
    21.   * setFile
    22.   *
    23.   * @param \TYPO3\CMS\Core\Resource\File $falFile
    24.   * @return void
    25.   */
    26. public function setFile(\TYPO3\CMS\Core\Resource\File $falFile) {
    27. $this->originalFileIdentifier = (int)$falFile->getUid();
    28. }
    29. }

    Er versucht offensichtlich, meine FileReference Klasse auf eine Table zu mappen was natürlich nicht funktionieren wird.
    Jetzt meine Frage, wie mache ich das am besten? :)

    Ist mein Ansatz überhaupt korrekt mit dem Storage das zu machen?

    Also ganz allgemein, wie würdet ihr das lösen, einen Fileupload mit Ajax und das Bild soll dann bei einem Objekt gespeichert werden in der Uploadaction.

    Vielen dank für eure Hilfe,
    Metabolic


  • 1
  • 0 x
    20 Beiträge
    1 Hilfreiche Beiträge
    09. 07. 2015, 13:21

    Hallo Metabolic,

    du musst noch folgendes Mapping in dein Typoscript (ext_typoscript_setup.txt) aufnehmen:

    1. config.tx_extbase {
    2. persistence {
    3. classes {
    4. VENDOR\EXTENSION\Domain\Model\FileReference {
    5. mapping {
    6. tableName = sys_file_reference
    7. columns {
    8. uid_local.mapOnProperty = file
    9. }
    10. }
    11. }
    12. }
    13. # make sure ref_index is updated
    14. updateReferenceIndex = 1
    15. }
    16. }

    VENDOR und EXTENSION gegen deine Werte austauschen.

    Hoffe so geht es.

    Viele Grüße

    charhunter

  • metabolic119 metabolic...
    TYPO3-Anwärter
    0 x
    4 Beiträge
    0 Hilfreiche Beiträge
    10. 07. 2015, 00:51

    Danke für die Hilfe!
    das war die Lösung :)

  • coder46 coder46
    Typ im Roten Hemd
    0 x
    3 Beiträge
    0 Hilfreiche Beiträge
    10. 07. 2015, 15:42

    eine Frage zu deiner uploadProfileImageAction(), hast du die in der createAction dann wieder aufgerufen ? und hast du da noch etwas anderes geändert oder hinzugefügt(TCA,Model,setup) ????

    Ich versuche so ein ImageUpload schon seit Tagen und ich bekomme es einfach nicht hin.

    Wenn du mir weiterhelfen könntest, würde ich mich sehr freuen.

    Danke

  • 1