Project

General

Profile

Actions

Bug #17991

closed

filepond: broken filter in file dialog box

Added by Carsten Rose 4 months ago. Updated 4 days ago.

Status:
Closed
Priority:
Normal
Assignee:
Enis Nuredini
Target version:
Start date:
25.02.2024
Due date:
% Done:

0%

Estimated time:
Discuss:
Prio Planung:
No
Vote:

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

Actions #1

Updated by Carsten Rose 4 months ago

  • Tracker changed from Support to Bug
Actions #2

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'],

Actions #3

Updated by Enis Nuredini 4 months ago

Einfacher Check der Mime-Types von gegebenen Dateien: https://codepen.io/rikschennink/pen/NzRvbj

Actions #4

Updated by Enis Nuredini 4 months ago

  • Assignee changed from Enis Nuredini to Carsten Rose
Actions #5

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/

Actions #7

Updated by Carsten Rose 3 months ago

Wir sollten Mime-Types vergessen: nur noch auf File Extensions pruefen.

Actions #8

Updated by Carsten Rose 3 months ago

  • Status changed from New to Priorize
  • Assignee changed from Carsten Rose to Enis Nuredini
Actions #10

Updated by Enis Nuredini 3 months ago

Da Filepond vieles einschränkt wird der clientseitige Check disabled wie besprochen. Danach sollte nur noch der Serverseitige Check sauber funktionieren.

Actions #11

Updated by Enis Nuredini 3 months ago

  • Status changed from Priorize to In Progress
Actions #12

Updated by Enis Nuredini 6 days ago

  • Status changed from In Progress to Priorize
Actions #13

Updated by Enis Nuredini 4 days ago

  • Status changed from Priorize to In Progress
Actions #14

Updated by Enis Nuredini 4 days ago

  • Status changed from In Progress to Closed

Problem mit der aktuellen QFQ Dev Version nicht mehr vorhanden.

Actions

Also available in: Atom PDF