Actions
Support #18499
openFE.type upload: a) guarantee unique filename, b) on download, offer orig filename
Start date:
26.04.2024
Due date:
% Done:
0%
Estimated time:
Discuss:
Prio Planung:
No
Vote:
Description
a) guarantee unique filename¶
- Beim Upload ist es oft noetig das QFQ die Files 'unique' ablegt.
- Beispiel: Ein User soll drei unterschiedliche Dokumente hochladen und er benennt alle gleich. Damit muss QFQ klar kommen.
- Wunsch: optional waere es gut wenn aus dem Dateinamen keine Rueckschluesse auf den Upload User geschlossen werden koennen.
b) on download, offer orig filename.¶
- Wenn ein User ein Dokument hochlaedt und dann zum Test wieder herunter, erwartet er, das der Dateiname gleich bleibt.
- Das ist aktuell bei der @fileDestination = fileadmin/{{id:R}}_{filename:Y}} nicht der Fall.
Ziel¶
- Option: QFQ Developer soll sich nicht darum kuemmern das der finale Dateiname unique ist, das soll QFQ selbst machen.
- Option: QFQ Developer soll die Moeglichkeit haben den finalen Dateinamen vorzugeben.
Vorschlag¶
Feature: uniqueness und orig filename zusammen.
fileDestination = fileadmin/[prefix]{{filenameUnique:V}}
[prefix]
Kann, muss aber nicht, angegeben werden.- Wenn es angegeben wird, und kein '_' am Ende vorhanden ist, wird ein '_' als Trennzeichen eingesetzt.
- Enthaelt
[prefix]
selbst '_', macht das nichts, es wird von rechts nach '_' gesucht. {{filenameUnique:V}}
- Wie ueblich wird der Dateiname 'gesanatized' - damit darueber keine Angriffe moeglich sind.
- Der
{{filenameUnique:V}}
zurueckgelieferte Wert ist Base64 kodiert. Basis ist{{filename:V}}
. - Laut https://en.wikipedia.org/wiki/Base64 kann das Zeichen '/' vorkommen. Das waere im Filesystem schlecht. Beim fertig kodierten String wird daher '/' durch '-' ersetzt.
- unique: QFQ fuegt einen Index ein falls bereits eine Datei gleichen Namens existiert (s.u.).
- Dateinamen, die dazu fuehren das der BASE64 String laenger als eine Zeile ist, werden solange von hinten gekuerzt, bis der BASE64 Code in eine Zeile passt.
Bsp:
# Dateiname: 'hello.pdf' echo "hello.pdf" | base64 | tr '/' '-' aGVsbG8ucGRmCg==
- Finale Datei:
fileadmin/[prefix]_B64_aGVsbG8ucGRmCg==.pdf
- Obwohl die Extension in dem Base64 kodierten String enthalten ist, wird sie trotzdem nochmal angehaengt - damit es keine Probleme bei der Erkennung des Dateitypens geben, sollte z.B. nativ via HTML auf die Datei zugegriffen werden.
- uniqueness: Falls es die Datei bereits gibt, wird in
_B64_
vor dem zweiten '_' ein Index eingefuegt.- Bsp: [prefix]_B64_aGVsbG8ucGRmCg==.pdf, [prefix]_B641_aGVsbG8ucGRmCg==.pdf, [prefix]_B642_aGVsbG8ucGRmCg==.pdf
- Wird kein {{filenameUnique:V}} verwendet, ist das uniqness Feature implizit deaktiviert.
Hinweis¶
- Wurde eine Datei 'a' schon mal hochgeladen, wird sie geloescht und eine andere Datei 'b' hochgeladen, so wird 'a' zuerst durch QFQ geloescht und dann 'b' eingetragen - das muss getestet werden ob es noch gut funktioniert.
- Die aktuelle Filepond Implementierung laesst vermutlich kein
d:...
zu - das muss eh gefixt werden.
Download¶
- Findet der Download via einem direktem HTML
<a href="fileadmin/...">
statt, kann keinsave-as
filename gesetzt werden. Der User speichert dann den Base64 kodierten Dateinamen.
Download via download.php, mit oder ohne SIP Kodierung:
- Ist in der
..AS _excel|pdf|link' kein explizites @d:<save-as>|...
definiert und gibt es_B64._
im Dateinamen, wird automatisch<save-as>
gesetzt (von hinten im Dateinamen nach '_B64...<.ext>' suchen und dekodieren). - Bei zusammengesetzen Dateien (PDF, ZIP) sollte es keine Aenderung geben, die sind nicht durch dieses Ticket betroffen.
- Fuer den Download koennte es interessant sein ein
save-as
anzubieten das sowohl den Originaldateinamen, plus einem Pre/Postfix hat. Das koennte erreicht werden in dem ein Fake Variable{{filenameDecode:V}}
definiert wird. Die wird nicht automatisch gefuellt, sondern on Demand in download.php.
Summary¶
- Der Vorschlag ist 100% Rueckwaertskompatibel, nur wenn
{{filenameUnique:V}}
verwendet wird, findet eine Kodierung das Dateinamens statt. - Automatische Uniqueness ist nur moeglich inkl. automatischer Base64 Kodierung.
Actions