Bug #17991
closedfilepond: broken filter in file dialog box
0%
Description
accept = image/*,application/pdf,text/plain,.r,.m,.nb,.rmd,.rnw,.zip,.dat
Brave: Die Files werden nicht angezeigt:
Wird der Filter auf 'All Files' gesetzt koennen die Files ausgewaehlt werden:
Firefox das gleiche:
Mit uploadType=v1
werden die Files korrekt angezeigt (Brave & FF)
Files
Updated by Enis Nuredini 4 months ago
Bei mir werden die Files angezeigt. Ignoriert werden nur solche mit angegebener Extension welches nicht in der Mapping-list enthalten sind.
.R oder .Rmd Files scheinen allgemein mit Filepond nicht zu funktionieren wenn nicht alle Dateien erlaubt werden. Das liegt in Zusammenhang damit dass diese Dateitypen gar keinen Mime-Type Standard besitzen (https://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen/R).
1. Lösung
Eine Lösung wäre es den Check vor dem Upload selbst zu machen. Dann würden wir die Validation von Filepond selbst immer für alle Dateitypen erlauben.
Der grösste Nachteil hier ist dass alle möglichen Extensions und Mime Types selbst eingetragen werden müssen. Bisher mussten nur die Extensions selbst definiert und gemappt werden und die eingegebenen Standard Mime-Types wurden alle erkannt. Mit Ausnahme von Dateitypen die keinen Mime Type Standard besitzen.
So würde der Code aussehen:
beforeAddFile: (fileItem) => { return new Promise((resolve, reject) => { // Allowed extensions and MIME types const allowedExtensions = ['rmd', 'jpg', 'png', ...]; const allowedMimeTypes = ['text/x-r-markdown', 'image/jpeg', 'image/png', ...]; // Extract the file extension const extension = fileItem.file.name.split('.').pop().toLowerCase(); // Check if the file extension or MIME type is in the allowed list if (allowedExtensions.includes(extension) || allowedMimeTypes.includes(fileItem.file.type)) { resolve(); } else { reject('File type not allowed'); } }); }
Ob dieser Vorschlag zuverlässig mit dem Filepond internen beforeAddFile funktioniert muss getestet werden.
2. Lösung
Oder wir verwenden fileValidateTypeDetectType von Filepond um die Deklaration der Mime Types für die Spezialfälle wie .r, .rmd, ... zu definieren. Jedoch bleibt der bisherige Check erhalten, bzw. das Mapping wird weitergeführt. Siehe folgendes Beispiel:
fileValidateTypeDetectType: (source, type) => new Promise((resolve, reject) => { if (source.name.endsWith('.Rmd')) { resolve('text/x-r-markdown'); } else { resolve(type); } }),
Hier muss aber beim Mapping die Extension selbst auch eigetragen werden. Da der Browser nichts mit den nicht standardisierten Mime Types anfangen kann. Der File-Browser würde es nicht als Supported File erkennen obwohl Filepond selbst es zulässt. Folgender Eintrag im Mapping würde das Problem lösen:
'.r': ['text/x-r-source', ' .r '], '.rmd': ['text/x-r-markdown', '.rmd'], '.rnw': ['text/markdown', '.rnw'],
Updated by Enis Nuredini 4 months ago
Einfacher Check der Mime-Types von gegebenen Dateien: https://codepen.io/rikschennink/pen/NzRvbj
Updated by Carsten Rose 3 months ago
Das gleiche Problem mit .py
Files: filepond denkt das ist text/plain
.
$ file --mime-type utils.py utils.py: text/plain
Filepond Doku: https://pqina.nl/filepond/docs/api/plugins/file-validate-type/