Contao-Camp 2024
Ergebnis 1 bis 33 von 33

Thema: [Erledigt] [FE] Files vor/nach Upload umbenennen

  1. #1
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard [Erledigt] [FE] Files vor/nach Upload umbenennen

    Hallo,

    ein Problem kommt selten allein ^^

    Wie schaffe ich es denn Dateien am liebsten vor dem Upload umzubennen? Der Hook der in der Liste steht läuft ja nu im BE und nicht im FE
    Liebe Grüße
    WebRoxx


  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Geht es dir um ein Frontend Upload Formular, dass du über den Formulargenerator erstellt hast? Wenn ja, dann kannst du im prepareFormData Hook die Datei automatisch umbenennen lassen und die Daten dementsprechend in $_SESSION['FILES'] aktualisieren.

  3. #3
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Geht es dir um ein Frontend Upload Formular, dass du über den Formulargenerator erstellt hast? Wenn ja, dann kannst du im prepareFormData Hook die Datei automatisch umbenennen lassen und die Daten dementsprechend in $_SESSION['FILES'] aktualisieren.
    Jupp, passiert das dann vor dem upload? oder muss ich im nachhinein noch die datenbank mit den neuen namen anpassen?
    Liebe Grüße
    WebRoxx


  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Jupp, passiert das dann vor dem upload?
    Nein, alles was in einem PHP Script passiert, passiert natürlich am Server selbst


    Zitat Zitat von Ralf2011 Beitrag anzeigen
    oder muss ich im nachhinein noch die datenbank mit den neuen namen anpassen?
    Wenn du, wie gesagt, im prepareFormData Hook alle Informationen in $_SESSION['FILES'] aktualisierst, musst du dich um sonst nichts mehr kümmern.

  5. #5
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, alles was in einem PHP Script passiert, passiert natürlich am Server selbst


    Wenn du, wie gesagt, im prepareFormData Hook alle Informationen in $_SESSION['FILES'] aktualisierst, musst du dich um sonst nichts mehr kümmern.
    Ach Kacke das klappt ja wieder nicht da es sich um das "Persönlcihe Daten" Modul handelt
    Liebe Grüße
    WebRoxx


  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Die save_callbacks aus dem DCA werden auch im Frontend Modul ausgeführt: https://github.com/contao/core/blob/...lData.php#L244

  7. #7
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    ALso ich habe da Felder die eigentkich nicht im DCA auftauschen, sondern nur für das "Persönliche Daten" MOdul gebraucht werden um drei Bilder hochzuladen.

    Mit dem Hook ändere ich das dann wie folgt.

    PHP-Code:
    ....
                    for(
    $i=0;$i<=2;$i++) {
                        
    $fileID = \FilesModel::findByPath($homeOrdner.'/'.$_SESSION['FILES']['fe_edb_files_'.$i]['name'])->id;
                        
    $path_parts pathinfo($_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);
                        
    $olfdname TL_ROOT."/".$homeOrdner."/".$_SESSION['FILES']['fe_edb_files_'.$i]['name'];
                        
    $_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name'] = TL_ROOT."/".$homeOrdner."/".$this->Member->company."_".$i.".".$path_parts['extension'];  
                        
    $_SESSION['FILES']['fe_edb_files_'.$i]['name'] = $this->Member->company."_".$i.".".$path_parts['extension'];  
                        
    rename($olfdname,$_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);
                        
    //DB aktualisieren
                        
    $this->Database->prepare("UPDATE tl_files SET tstamp='".time()."', name=? WHERE id=?")->execute($_SESSION['FILES']['fe_edb_files_'.$i]['name'],$fileID);    
                    }
                    

    .... 
    Läauft auch wie geschwünscht Jetzt wäre es nur schön wenn ich eine Datei-Synchronisation anstoßen könnte
    Liebe Grüße
    WebRoxx


  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Dafür gibt es die Funktion \Dbafs::moveResource($strSource, $strDestination). Selbst brauchst du da nichts in der Datenbank aktualisieren.
    PHP-Code:
    $this->import('Files');
    $this->Files->rename($source$destination);
    \
    Dbafs::moveResource($source$destination); 

  9. #9
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dafür gibt es die Funktion \Dbafs::moveResource($strSource, $strDestination). Selbst brauchst du da nichts in der Datenbank aktualisieren.
    PHP-Code:
    $this->import('Files');
    $this->Files->rename($source$destination);
    \
    Dbafs::moveResource($source$destination); 

    PHP-Code:
                    for($i=0;$i<=2;$i++) {
                        
    $fileID = \FilesModel::findByPath($homeOrdner.'/'.$_SESSION['FILES']['fe_edb_files_'.$i]['name'])->id;
                        
    $path_parts pathinfo($_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);
                        
    $oldname TL_ROOT."/".$homeOrdner."/".$_SESSION['FILES']['fe_edb_files_'.$i]['name'];
                        
    $_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name'] = TL_ROOT."/".$homeOrdner."/".$this->Member->company."_".$i.".".$path_parts['extension'];  
                        
    $_SESSION['FILES']['fe_edb_files_'.$i]['name'] = $this->Member->company."_".$i.".".$path_parts['extension'];  
                        
    //rename($olfdname,$_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);
                        //DB aktualisieren
                        //$this->Database->prepare("UPDATE tl_files SET tstamp='".time()."', name=? WHERE id=?")->execute($_SESSION['FILES']['fe_edb_files_'.$i]['name'],$fileID);    
                        
                        
    $this->Files->rename($oldname$_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);
                        \
    Dbafs::moveResource($oldname$_SESSION['FILES']['fe_edb_files_'.$i]['tmp_name']);  
                    } 
    das bringt jetzt die Meldung: Fatal error: Uncaught exception InvalidArgumentException with message Invalid resource

    Pfade stimmen aber moveResource verschiebt doch die Dateien, das will ich ja eigentlich garnicht, der Pfad bleibt ja gleich nur der Name ändert sich
    Liebe Grüße
    WebRoxx


  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    das bringt jetzt die Meldung: Fatal error: Uncaught exception InvalidArgumentException with message Invalid resource
    Wie sieht die gesamte Fehlermeldung aus?



    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Pfade stimmen aber moveResource verschiebt doch die Dateien, das will ich ja eigentlich garnicht, der Pfad bleibt ja gleich nur der Name ändert sich
    Name ändern = verschieben.

  11. #11
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Code:
    Fatal error: Uncaught exception InvalidArgumentException with message Invalid resource /var/www/pfad-zur-datei/dateiname.jpg thrown in system/modules/core/library/Contao/Dbafs.php on line 60
    So sieht die aus.

    Übergeben tut er den "alten absoluten Pfad" und den neuen.
    Liebe Grüße
    WebRoxx


  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Ah, die Dbafs Funktionen erwarten relative Pfade, nicht absolute.

  13. #13
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ah, die Dbafs Funktionen erwarten relative Pfade, nicht absolute.
    PERFEKT, bis auf das die $this->Files->rename nicht läuft klappt es super. naja mit rename (PHP) geht es aber

    Du bist mein Lebensretter, 1000 Dank jetzt schon
    Liebe Grüße
    WebRoxx


  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Hm
    PHP-Code:
    $this->import('Files'); 
    vergessen? Aber spielt ansonsten auch keine Rolle denke ich.

  15. #15
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Hm
    PHP-Code:
    $this->import('Files'); 
    vergessen? Aber spielt ansonsten auch keine Rolle denke ich.
    Ist drin, weiß auch ne woran das liegt
    Liebe Grüße
    WebRoxx


  16. #16
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Ist drin, weiß auch ne woran das liegt
    Auch die files Klasse arbeitet mit relativen Pfaden. Liegt es daran?

    Gesendet vom Smartphone

  17. #17
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von webstar Beitrag anzeigen
    Auch die files Klasse arbeitet mit relativen Pfaden. Liegt es daran?

    Gesendet vom Smartphone
    Jupp daran lag es wohl Danke dir
    Liebe Grüße
    WebRoxx


  18. #18
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    So bei meiner 4er installation scheint das so nicht mehr zu laufen


    $this->Files->rename($rel_path, $homeOrdner.'/'.$fileName.".".$path_parts['extension']);

    erzeugt volgend

    [2018-03-26 15:28:22] app.CRITICAL: An exception occurred. {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowa bleError(code: 0): Call to a member function rename() on null at /www/htdocs/website/packages/test-bundle/src/Classes/SendForm.php:45)"} []

    und Files::rename($rel_path, $homeOrdner.'/'.$fileName.".".$path_parts['extension']);

    [2018-03-26 15:26:20] app.CRITICAL: An exception occurred. {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowa bleError(code: 0): Using $this when not in object context at /www/htdocs/website/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Files.php:202)"} []
    Liebe Grüße
    WebRoxx


  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    $this->Files geht nur wenn deine Klasse wo du das machen möchtest irgendwie von Contao\System erbt und du $this->import('Files') vorher gemacht hast. Hast du das gemacht?

  20. #20
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    $this->Files geht nur wenn deine Klasse wo du das machen möchtest irgendwie von Contao\System erbt und du $this->import('Files') vorher gemacht hast. Hast du das gemacht?
    Ja das habe ich aus der 3er Erweiterung entfernt bei der Übernahme...man was ist denn heute los

    Danke
    Liebe Grüße
    WebRoxx


  21. #21
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Muss das Thema nochmal aufgreifen.

    Habe auf einer geschützten Seite ein Formular mit mehreren Upload-Feldern.
    Die Dateien werden in das Mitgliederverzeichnis gespeichert.

    Da ich die Bilder später auf der Mitgliederseite auf einer fixen Position anzeigen lassen möchte muss das Bild fix benannt sein.
    Trotz Anleitung für die Mitglieder werden die Bilder nicht immer richtig vor dem Upload umbenannt.

    Wie schaffe ich es nun dass die hochgeladene Datei automatisch umbenannt wird und dann im Mitgliederverzeichnis landet?
    Der Wunsch-Dateiname könnte ja direkt im form_upload Template hinterlegt sein (pro Upload ein Template).

    Habe schon einige Threads durch und viel probiert, aber leider kein Erfolg.
    Im Einsatz ist Contao 4.4. Danke für die Hilfe

  22. #22
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Warum muss es ein fixer Dateiname sein? Du kannst dir doch einfach die Bilder holen/ausgeben lassen, die in einem gewissen Ordner sind.

  23. #23
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Alle Bilder des Userverzeichnis in einer Galerie anzeigen geht leider nicht. Muss die einzelnen Bilder an verschiedenen Positionen im Template ausgeben.

    Aktuell gebe ich die Fotos in der Mitgliederliste (mod_memberlist) so aus:
    {{image::files/user/user_<?php echo $id; ?>/foto1.jpg?width=400&height=300}}

    Wüsste nicht wie ich es ander als mit fixen Dateinamen lösen könnte.

  24. #24
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Achso, aber es wäre doch für so einen Zweck viel sinnvoller wenn man die zum Mitglied gehörigen Bilder auch beim Mitglied auswählt.

  25. #25
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Allerdings!

    Hatte mir schon die Avatar Erweiterung (https://github.com/terminal42/contao-avatar) angesehen, aber hier kann man nur 1 Bild einbinden.
    In meinem Fall sind es aber 7.

    Hmmm...

  26. #26
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Prinzipiell wäre das nur eine Erweiterung des DCA, mehr brauchst du nicht

  27. #27
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Danke für den Tipp, dachte nicht dass sich das mit einer einfachen DCA Erweiterung machen lässt.

    Meine Lösung sieht wie folgt aus (Contao 4.4).

    Installation von Fineuploader
    https://github.com/terminal42/contao-fineuploader

    Erweiterung DCA:

    PHP-Code:
    // Anpassung der Palette
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'dateOfBirth',
        
    'xt_upload,dateOfBirth',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    );

    // Hinzufügen der Feld-Konfiguration
    $GLOBALS['TL_DCA']['tl_member']['fields']['xt_upload'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['xt_upload'],
        
    'exclude'   => true,
        
    'inputType' => 'fineUploader',
        
    'eval'      => array
        (
            
    'storeFile' => true,  
            
    'multiple' => false,
            
    'uploadFolder' => 'files/uploads',
            
    'useHomeDir' => true,   
            
    'uploaderLimit' => 1,  
            
    'addToDbafs' => false,
            
    'extensions' => 'jpg,png',
            
    'minlength' => 0,
            
    'maxlength' => 4048000,
            
    'maxWidth' => 5000,
            
    'maxHeight' => 5000,
            
    'imageWidth' => 5000,
            
    'imageHeight' => 5000,
            
    'doNotOverwrite' => false,
            
    'uploadButtonLabel' => 'Datei auswählen',
            
    'chunking' => false,
            
    'maxConnections' => 1,
            
    'directUpload' => true,
            
    'imageSize' => [10001000'proportional'],
            
    'feViewable' => true,
            
    'feEditable' => true,
            
    'tl_class' => 'clr long'
        
    ),
        
    'sql'      => "blob NULL"
    ); 
    Das einzige was noch nicht so optimal funktioniert...
    Uploads vom Mitglied im Frontend werden in HomeDir gespeichert.
    Uploads vom Admin im Backend nach 'files/uploads'.
    Es wäre natürlich besser wenn in beiden Fällen HomeDir verwendet wird, damit die Daten zentral gespeichert sind.

  28. #28
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Das Home Directory ist ja für jedes Mitglied unterschiedlich. Der Admin muss daher dafür sorgen die Dateien in den richtigen Ordner zu laden.

  29. #29
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Der Admin kann ja die Datei nicht in einen beliebigen Ordner (Home Directory des Mitglieds) hochladen und dann auswählen, der Upload Ordner ist ja fix.

    Eine Möglichkeit ist die Frontend-Vorschau mit "Mitglied-Vorschau" zu öffnen und dann die Datei über das Frontend hochzuladen.

  30. #30
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Mecintosch Beitrag anzeigen
    Der Admin kann ja die Datei nicht in einen beliebigen Ordner (Home Directory des Mitglieds) hochladen und dann auswählen, der Upload Ordner ist ja fix.
    Der Admin hat doch Zugriff auf die komplette Dateiverwaltung?

  31. #31
    Contao-Nutzer
    Registriert seit
    08.11.2009.
    Beiträge
    191

    Standard

    Die Datei wird ja in den vorgegeben Pfad hochgeladen.
    PHP-Code:
            'uploadFolder' => 'files/uploads'
    Nur wenn man als Mitglied im Frontend die Datei hochlädt wird das Mitgliederverzeichnis als Upload-Pfad verwendet.

    Aber der Workaround für Admins funktioniert:
    Frontendvorschau + Anzeige als Mitglied und dann uploaden

  32. #32
    Contao-Fan Avatar von intradesign
    Registriert seit
    28.07.2015.
    Beiträge
    338

    Standard Dateien umbenennen oder Warnung bei Upload

    Hallo zusammen,

    ich habe ein ähnliches Problem: Für Bewerbungen können Dateien in einem Formular hochgeladen werden. Diese Dateien werden dann zusammen mit den Formulardaten per Mail versendet. So weit funktioniert das auch, so lange Dateien vernünftig benannt sind. Im aktuellen Fall wurde eine Datei mit mehreren Kommas (Kommta) und einem Punkt im Dateinamen hochgeladen:

    Bewerbung, Anschreiben, Lebenslauf, Zeugnisse V. Nachname.pdf

    Diese Datei wird im System-Log als hochgeladen angezeigt, allerdings nur ins Temp-Verzeichnis, sie wurde nicht in den eigentlichen Upload-Ordner verschoben und deshalb wohl auch nicht an die Mail angehängt.

    Testweise habe ich "V." aus dem Dateinamen entfernt. Wenn nur die Kommas im Namen stehen funktioniert es: Die Kommas werden in Unterstriche umgewandelt. Ich gehe also davon aus, dass es am Punkt liegt.

    In Betrieb ist Contao 4.7 mit dem Drag & Drop Uploader von Terminal 42.

    Frage: Gibt es eine Möglichkeit, auch die Punkte (außer dem letzten vor der Dateiendung) umzuwandeln ODER eine Meldung auszugeben, dass der Dateiname ungültig ist?

    Vielen Dank und viele Grüße
    Timo

  33. #33
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard Eine kleine Verständnisfrage

    Mir ist nicht ganz klar - vom Ausgangspost - welcher Hook denn nun verwendet wurde. PrepareFormData greift doch nicht für Anpassungen via Modul 'Persönliche Daten', oder? Zumindest bei mir nicht.

    Und UpdatePersonalData wäre für die vorgängige Umbenennung ja zu spät und sehr umständlich, nicht?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •