Hallo Steffen,
das ist alles etwas durcheinander. Im Browser, meine ich.
Um die Sache nicht zu leicht zu machen, kannst Du von einen DataTransferItem eine Datei als File (getAsFile), als FileHandle (getAsFileHandle) und als FileEntry (webkitGetAsEntry) bekommen. Alle drei gehören zu unterschiedlichen Schnittstellenfamilien.
Erstens gibt es das File API, wohin das File Objekt gehört. Das kennst Du, das kannst Du slicen, streamen und arrayBuffern.
Zweitens gibt es das File System Access API, das Dir mit window.showOpenFilePicker() oder windowDirectoryPicker Handles auf Files und Directorys liefert.
Dort gibt es das FileSystemFileHandle mit kind
, type
und der getFile()
Methode, die zum Handle ein File-Objekt liefert, aber nicht direkt, sondern als Promise, das Du await
en musst oder auf dem Du mit .then einen Callback registrieren musst.
Drittens gibt es das File and Directory Entries API. Das simuliert angeblich nur ein lokales Filesystem, aber ein genauerer Blick zeigt, dass das mitnichten eine Simulation ist, sondern ein Blickfenster in einen realen Directory-Teilbaum deines Dateisystems. Zumindest was das Auflisten von Dateien angeht.
In diesem API gibt es die FileSystemEntry Schnittstelle mit ihren Ausprägungen für Directory und File.
Ein FileSystemDirectoryEntry** Objekt hat ebenfalls eine getFile()
Methode. Die tut aber etwas anderes als ihr Brüderchen im FileSystemFileHandle! Das FileSystemDirectoryEntry zeigt auf einen Directory-Teilbaum, und mit getFile lokalisierst Du darin eine Datei. Über einen Callback bekommst Du einen FileSystemFileEntry dafür.
Dieser FileSystemFileEntry wiederum hat eine file() Methode, die Dir über einen Callback ein File
-Objekt bereitstellt, um auf die Datei zuzugreifen.
Wenn man davon irgendwas durcheinanderbringt, passiert nichts sinnvolles mehr.
Rolf
sumpsi - posui - obstruxi