Project

General

Profile

Actions

Support #18499

open

FE.type upload: a) guarantee unique filename, b) on download, offer orig filename

Added by Carsten Rose 10 days ago. Updated 10 days ago.

Status:
New
Priority:
Normal
Assignee:
Carsten Rose
Target version:
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 kein save-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 #1

Updated by Carsten Rose 10 days ago

  • Subject changed from FE.type upload: a) guarantee File unique, b) on download, offer orig filename to FE.type upload: a) guarantee unique filename, b) on download, offer orig filename
  • Description updated (diff)
  • Assignee set to Carsten Rose
Actions #2

Updated by Carsten Rose 10 days ago

  • Description updated (diff)
Actions #3

Updated by Carsten Rose 10 days ago

  • Description updated (diff)
Actions #4

Updated by Carsten Rose 10 days ago

  • Description updated (diff)
Actions

Also available in: Atom PDF