yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

yform Dateiupload -> Eigener Uploadordner und Dateipräfix #725

Closed kochundsimon closed 4 years ago

kochundsimon commented 5 years ago

Redaxo 5.6.4

Ich will über yform eine Datei uploaden mit dem Code:

upload|dateiupload|Dateiupload (bei mehreren Dateien empfehlen wir, diese in einen ZIP-Ordner zu packen)|1,500000|.gif,.jpeg,.png,.pdf,.zip,.doc,.docx,.xls,.xlsx,.ppt,.pptx||Die Datei ist zu klein!,Die Datei ist zu gross.,Der Dateityp ist nicht erlaubt.,Sie haben keine Datei ausgewählt.|upload|dateiupload|rex5/media/uploads|gfsupload_|

Die Datei wird nicht ins angegebene Verzeichnis (Berechtigung 0775) gespeichert, sondern in:

rex5/redaxo/data/addons/yform/plugins/manager/upload/rex_gfs_factoringanfrage/dateiupload

Der Dateiname wird zwar ergänzt, aber mit einer 2stelligen Zahl davor und nicht mit dem oben angegeben Präfix. In der Datenbank wird der Original-Dateiname ohne Präfix gespeichert. In der Vorversion 4.6 wurde der Dateiname korrekt in die DB und ins Verzeichnis gespeichert, z.B. 50c9611cf70a0d9e51f80c6768af6c5d_gfsupload__dateiname.pdf

dergel commented 5 years ago

welche yform version ? bei der aktuellen version 3.1.1 sollte kein Ordner und kein präfix nötig und möglich sein.

kochundsimon commented 5 years ago

Bei mir läuft die version 3.0-beta3

Der Kunde bekommt eine E-Mail mit einem Direktlink zum Download der upgeloadeten Dateien. Wie soll ich das sonst lösen, wenn version 3.1.1 das nicht mehr unterstützt? Für jede Idee wäre ich sehr dankbar.

alxndr-w commented 5 years ago

Z.B. über den Download-Effekt im Medien Manager. Das wurde leider bisher nicht so gut dokumentiert. Melde dich in slack mal bezüglich Hilfe

kochundsimon commented 5 years ago

Danke, ich hatte ja tatsächlich schon eine andere Lösung gefunden, ein Workaround. Bei Bedarf melde ich mich in Slack.

alxndr-w commented 5 years ago

@vedatoezdemir hilft dir das mit dem Download-Effekt?

fietstouring commented 4 years ago

Muss mich hier einhaken. Ich erstelle gerade eine Anwendung bei der im Backend yForm-Datensätze erstellt werden mit Upload-Feldern. Diese Dateien sollen bewusst nicht im Medienpool sein (idealerweise eigentlich sogar in einem ordner außerhalb des webroots...)

Wie kann ich im Frontend auf diese Dateien zugreifen (ich würde das mittels eines Download-Scripts machen)? Ich kenne ja den genauen Dateinamen nicht, da der geändert wird, in der DB steht nur der originale Dateiname. Kann ich eine Funktion nutzen, die es offenbar schon gibt -> im Backend kann ich die Datei im Editiermodus ja downloaden.

tbaddade commented 4 years ago

Kann ich eine Funktion nutzen, die es offenbar schon gibt -> im Backend kann ich die Datei im Editiermodus ja downloaden.

Schau dir am besten die Stelle genau an und nimm dies als Basis für dein Skript.

fietstouring commented 4 years ago

ah ja, danke!

alxndr-w commented 4 years ago

@fietstouring

https://github.com/yakamara/redaxo_yform/blob/c7fb0951dd9a33a701f4cd235baf1b311ed85a0f/lib/yform/value/upload.php#L47-L54

und

https://github.com/yakamara/redaxo_yform/blob/c7fb0951dd9a33a701f4cd235baf1b311ed85a0f/lib/yform/value/upload.php#L171-L174

https://github.com/yakamara/redaxo_yform/blob/c7fb0951dd9a33a701f4cd235baf1b311ed85a0f/lib/yform/value/upload.php#L237-L251

Ich habe das mit dem $unique überhaupt nicht kapiert, wo dieser Präfix herkommt:

https://github.com/yakamara/redaxo_yform/blob/c7fb0951dd9a33a701f4cd235baf1b311ed85a0f/lib/yform/value/upload.php#L214-L217

$cstrong ist auch als Variable nie befüllt. Keine Ahnung, wie YForm es schafft, dass hier immer für jede Datei beim Durchlaufen der identische Präfix entsteht, aber für jeden neuen Upload ein anderer generiert wird.

fietstouring commented 4 years ago

Danke! ähnliches hab ich mir auch gedacht, als ich mir das durchsah. Hab mir aber überlegt dass ich das ganze gar nicht brauche. Die files werden ja mit der ID des Datensatzes als Prefix_ gespeichert, dann werden Leer-, Sonderzeichen und Umlaute mit underscore ersetzt. Da ich die Id ja kenne in meinem Frontend kann ich in meinem Downloadscript einfach das jeweilige file aus dem Dateipfad aufrufen. Ändern müsste ich dann nur den Pfad wo die gespeichert werden, der soll bei mir ausserhalb des webroots sein. Im Frontend werden einfach nur Dateien angezeigt als Liste und die soll man downloaden können. Wie klingt das?

Also der Prefix ist doch die ID des Datensatz mit underscore! oder irre ich mich? und damit wird der filename geändert mb_strtolower(preg_replace('/[^a-zA-Z0-9.\-\$\+]/', '_', $FILE['name']));

alxndr-w commented 4 years ago

die ID des Datensatzes ist doch kürzer als 50c9611cf70a0d9e51f80c6768af6c5d_gfsupload__dateiname.pdf

fietstouring commented 4 years ago

bei mir lauten die filenamen zB 2_10semicolons.pdf

das file hieß vorher 10semicolons.pdf, der Datensatz hat die ID 2.

ist anscheinend abhängig von einer main_id in upload.php leider weiß ich nicht was die ist oder woher die kommt. In meiner Anwendung habe ich im Backend eine yform-Tabelle erstellt mit mehreren Uploadfeldern. https://github.com/yakamara/redaxo_yform/blob/c7fb0951dd9a33a701f4cd235baf1b311ed85a0f/lib/yform/value/upload.php#L261-L266

alxndr-w commented 4 years ago

@dergel @tbaddade könnt ihr uns denn - nach einem Blick in den Code, darüber aufklären, warum da manchmal so ewig lange Präfixe rauskommen?

tbaddade commented 4 years ago

Ich kann da leider ebenso wenig helfen. Ich würde mir auch den Code ansehen und versuchen das nachzustellen. Genaueres weiß nur Jan.

alxndr-w commented 4 years ago

Erläuterungen hier: https://github.com/yakamara/redaxo_yform/pull/889/files