[Frage] Bilder im Frontend hochladen und wieder löschen TYPO3-Version: 6.1.1

  • 0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    26. 11. 2013, 00:20

    Ich habe eine Extension geschrieben, mit der Frontend-User Inhalte mit Bild erstellen können. Das heißt, User können Bilder hochladen; diese werden auch im FE und BE angezeigt, in der sys_file_reference Tabelle werden auch alle Daten korrekt hinterlegt.

    Wie ist es allerdings möglich, ein Bild per Frontend zu entfernen? Ich habe eine Link gebaut, der eine Action zum Entfernen des Bilds aufruft. Aber was genau muss in der Action drin stehen?


  • 1
  • rfehling rfehling
    Padawan
    0 x
    44 Beiträge
    3 Hilfreiche Beiträge
    27. 11. 2013, 14:36

    Leider gibt es noch keine Upload Funktion in der aktuellsten Extbase Version. Man ist gezwungen die komplette Logik hierfür selbst zu entwickeln.

    Ich gebe dir mal komplette Auszüge aus dem mm_forum Upload.

    Hier die Action aus dem Beitrag erstellen. Das $_POST Array wird zu einem vernüftigen Extbase Objekt zusammen gebaut und anschließend per set gespeichert.

    1. public function createAction(Tx_MmForum_Domain_Model_Forum_Topic $topic, Tx_MmForum_Domain_Model_Forum_Post $post, array $attachments = array()) {
    2. [...]
    3. if(!empty($attachments)) {
    4. $attachments = $this->attachmentService->initAttachments($attachments);
    5. $post->setAttachments($attachments);
    6. }
    7. [...]
    8. }

    Die Konvertierung zur einem Extbase Objekt war ein wenig wild. Hier wird der Eintrag aus dem TMP Verzeichnis gleich verschoben.

    1. class Tx_MmForum_Service_AttachmentService implements \TYPO3\CMS\Core\SingletonInterface {
    2.  
    3.  
    4. /**
    5. * An instance of the Extbase object manager.
    6. * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
    7. */
    8. protected $objectManager = NULL;
    9.  
    10. /**
    11. * Injects an instance of the extbase object manager.
    12. * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
    13. * @return void
    14. */
    15. public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager) {
    16. $this->objectManager = $objectManager;
    17. }
    18.  
    19.  
    20. /**
    21. * Converts HTML-array to an object
    22. * @param array $attachments
    23. * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage
    24. */
    25. public function initAttachments(array $attachments){
    26. /* @var Tx_MmForum_Domain_Model_Forum_Attachment */
    27. $objAttachments = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    28.  
    29. foreach($attachments AS $attachmentID => $attachment) {
    30. if($attachment['name'] == '') continue;
    31. $attachmentObj = $this->objectManager->create('Tx_MmForum_Domain_Model_Forum_Attachment');
    32. $tmp_name = $_FILES['tx_mmforum_pi1']['tmp_name']['attachments'][$attachmentID];
    33. $mime_type = mime_content_type($tmp_name);
    34.  
    35. //Save in ObjectStorage and in file system
    36. $attachmentObj->setFilename($attachment['name']);
    37. $attachmentObj->setRealFilename(sha1($attachment['name'].time()));
    38. $attachmentObj->setMimeType($mime_type);
    39.  
    40. //Create dir if not exists
    41. $tca = $attachmentObj->getTCAConfig();
    42. $path = $tca['columns']['real_filename']['config']['uploadfolder'];
    43. if(!file_exists($path)) {
    44. mkdir($path,'0777',true);
    45. }
    46.  
    47. //upload file and put in object storage
    48. $res = \TYPO3\CMS\Core\Utility\GeneralUtility::upload_copy_move($tmp_name,$attachmentObj->getAbsoluteFilename());
    49. if($res === true) {
    50. $objAttachments->attach($attachmentObj);
    51. }
    52. }
    53. return $objAttachments;
    54. }
    55.  
    56. }

    Die lösch-Funktion sieht bei uns wie folgt aus (leider nicht anders Möglich):

    1. /**
    2. * Removes an attachment.
    3. *
    4. * @param Tx_MmForum_Domain_Model_Forum_Attachment $attachment The attachment.
    5. * @return void
    6. */
    7. public function removeAttachment(Tx_MmForum_Domain_Model_Forum_Attachment $attachment) {
    8. if(file_exists($attachment->getAbsoluteFilename())){
    9. unlink($attachment->getAbsoluteFilename());
    10. }
    11. $this->attachments->detach($attachment);
    12. }

    Ich hoffe die Auszüge konnten dir ein wenig weiterhelfen :)

    Grüße,
    rfehling

  • 1