| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/API/File_System_API | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen untersttzenden Browsern verfgbar.
Hinweis: Diese Funktion ist in Web Workers verfgbar.
Die File System API mit Erweiterungen, die ber die File System Access API bereitgestellt werden, um auf Dateien im Dateisystem des Gerts zuzugreifen ermglicht Lese-, Schreib- und Dateiverwaltungsfunktionen.
Siehe Beziehung zu anderen dateibezogenen APIs fr einen Vergleich zwischen dieser API, der File and Directory Entries API und der File API.
Diese API ermglicht die Interaktion mit Dateien auf einem lokalen Gert des Benutzers oder auf einem vom Benutzer zugnglichen Netzwerkdateisystem. Die Kernfunktionalitt dieser API umfasst das Lesen von Dateien, das Schreiben oder Speichern von Dateien und den Zugriff auf die Verzeichnisstruktur.
Die meiste Interaktion mit Dateien und Verzeichnissen erfolgt ber Handles. Eine bergeordnete Klasse FileSystemHandle hilft bei der Definition von zwei abgeleiteten Klassen: FileSystemFileHandle und FileSystemDirectoryHandle, fr Dateien bzw. Verzeichnisse.
Die Handles reprsentieren eine Datei oder ein Verzeichnis auf dem System des Benutzers. Sie knnen zuerst auf sie zugreifen, indem Sie dem Benutzer einen Datei- oder Verzeichnisauswahldialog mit Methoden wie window.showOpenFilePicker() und window.showDirectoryPicker() anzeigen. Sobald diese aufgerufen werden, prsentiert sich der Dateiauswahldialog und der Benutzer kann entweder eine Datei oder ein Verzeichnis auswhlen. Nachdem dies erfolgreich passiert ist, wird ein Handle zurckgegeben.
Sie knnen auch ber folgende Methoden auf Datei-Handles zugreifen:
DataTransferItem.getAsFileSystemHandle() der HTML Drag and Drop API.Jedes Handle bietet seine eigene Funktionalitt, und es gibt einige Unterschiede, je nachdem welches verwendet wird (siehe den Abschnitt Schnittstellen fr spezifische Details). Sie knnen dann auf Dateidaten oder Informationen (einschlielich untergeordneter Elemente) des ausgewhlten Verzeichnisses zugreifen. Diese API erffnet Funktionalitten, die dem Web bisher fehlten. Dennoch stand die Sicherheit bei der Gestaltung der API im Vordergrund, und der Zugriff auf die Datei-/Verzeichnisedaten ist nur mglich, wenn der Benutzer dies ausdrcklich gestattet (zu beachten ist, dass dies nicht auf das Origin private file system zutrifft, da es fr den Benutzer nicht sichtbar ist).
Hinweis: Die verschiedenen Ausnahmen, die beim Verwenden der Funktionen dieser API ausgelst werden knnen, sind auf den relevanten Seiten aufgefhrt, wie in der Spezifikation definiert. Die Situation wird jedoch durch die Interaktion der API mit dem zugrundeliegenden Betriebssystem komplizierter. Es wurde ein Vorschlag gemacht, die Fehlermappings in der Spezifikation aufzulisten, der ntzliche verwandte Informationen umfasst.
Hinweis:
Objekte, die auf FileSystemHandle basieren, knnen auch in einer IndexedDB-Datenbankinstanz serialisiert oder ber postMessage() bertragen werden.
Das Origin private file system (OPFS) ist ein Speicherendpunkt, der als Teil der File System API bereitgestellt wird. Es ist der Herkunft der Seite privat und nicht wie das regulre Dateisystem fr den Benutzer sichtbar. Es bietet Zugriff auf eine spezielle Art von Datei, die hochoptimiert fr Leistung ist und einen direkten Schreibzugriff auf ihren Inhalt ermglicht.
Die folgenden Anwendungsflle sind mglich:
Apps mit persistentem Uploader
Videospiel oder andere Apps mit vielen Medienressourcen
Audio- oder Fotobearbeitungs-Apps mit Offline-Zugriff oder lokaler Cache (ideal fr Leistung und Geschwindigkeit)
Offline-Videoanzeiger
Offline-Webmail-Client
Lesen Sie unseren Origin private file system fr Anleitungen zur Nutzung.
FileSystemWritableFileStream-Schnittstelle. Sobald die Daten, die Sie speichern mchten, im Format eines Blob, String-Objekts, Zeichenfolgenliterals oder buffer vorliegen, knnen Sie einen Stream ffnen und die Daten in einer Datei speichern. Dies kann die bestehende Datei oder eine neue Datei sein.FileSystemSyncAccessHandle schreiben Sie nderungen an einer Datei mit der Methode write(). Optional knnen Sie auch flush() aufrufen, wenn Sie mchten, dass die nderungen zu einem bestimmten Zeitpunkt auf die Festplatte geschrieben werden (anderenfalls knnen Sie dies dem zugrundeliegenden Betriebssystem berlassen, das dies nach Bedarf bernimmt, was in den meisten Fllen in Ordnung sein sollte).FileSystemChangeRecord Enthlt Details zu einer einzelnen nderung, die von einem FileSystemObserver beobachtet wurde.
FileSystemHandleEin Objekt, das einen Datei- oder Verzeichniseintrag darstellt. Mehrere Handles knnen denselben Eintrag reprsentieren. Meistens arbeiten Sie nicht direkt mit FileSystemHandle, sondern eher mit seinen abgeleiteten Schnittstellen FileSystemFileHandle und FileSystemDirectoryHandle.
FileSystemFileHandleBietet einen Handle zu einem Dateisystemeintrag.
FileSystemDirectoryHandleBietet einen Handle zu einem Dateisystemverzeichnis.
FileSystemObserver Bietet einen Mechanismus, um nderungen an ausgewhlten Dateien oder Verzeichnissen zu beobachten.
FileSystemSyncAccessHandleBietet einen synchronen Handle zu einem Dateisystemeintrag, der vor Ort auf einer einzelnen Datei auf der Festplatte arbeitet. Die synchrone Natur der Dateioperationen ermglicht eine hhere Leistung fr kritische Methoden in Kontexten, in denen asynchrone Operationen mit hohem Overhead verbunden sind, z.B. WebAssembly. Diese Klasse ist nur innerhalb dedizierter Web Workers fr Dateien innerhalb des origin private file system zugnglich.
FileSystemWritableFileStreamEin WritableStream-Objekt mit zustzlichen Komfortmethoden, das auf einer einzelnen Datei auf der Festplatte arbeitet.
Window.showDirectoryPicker()Zeigt einen Verzeichnisauswahldialog an, der es dem Benutzer erlaubt, ein Verzeichnis auszuwhlen.
Window.showOpenFilePicker()Zeigt einen Dateiauswahldialog an, der es dem Benutzer erlaubt, eine oder mehrere Dateien auszuwhlen.
Window.showSaveFilePicker()Zeigt einen Dateiauswahldialog an, der es dem Benutzer erlaubt, eine Datei zu speichern.
DataTransferItem.getAsFileSystemHandle()Gibt ein Promise zurck, das mit einem FileSystemFileHandle erfllt wird, wenn das gezogene Element eine Datei ist, oder mit einem FileSystemDirectoryHandle, wenn das Element ein Verzeichnis ist.
StorageManager.getDirectory()Wird verwendet, um eine Referenz zu einem FileSystemDirectoryHandle-Objekt zu erhalten, das den Zugriff auf ein Verzeichnis und dessen Inhalte, gespeichert im origin private file system, ermglicht. Gibt ein Promise zurck, das mit einem FileSystemDirectoryHandle-Objekt erfllt wird.
Der untenstehende Code erlaubt es dem Benutzer, eine Datei aus dem Dateiauswahldialog auszuwhlen.
async function getFile() {
// Open file picker and destructure the result the first handle
const [fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
return file;
}
Die folgende asynchrone Funktion prsentiert einen Dateiauswahldialog und verwendet nach der Auswahl einer Datei die Methode getFile(), um den Inhalt zu erhalten.
const pickerOpts = {
types: [
{
description: "Images",
accept: {
"image/*": [".png", ".gif", ".jpeg", ".jpg"],
},
},
],
excludeAcceptAllOption: true,
multiple: false,
};
async function getTheFile() {
// Open file picker and destructure the result the first handle
const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
// get file contents
const fileData = await fileHandle.getFile();
}
Das folgende Beispiel gibt ein Verzeichnishandle mit dem angegebenen Namen zurck. Falls das Verzeichnis nicht existiert, wird es erstellt.
const dirName = "directoryToGetName";
// assuming we have a directory handle: 'currentDirHandle'
const subDir = await currentDirHandle.getDirectoryHandle(dirName, {
create: true,
});
Die folgende asynchrone Funktion verwendet resolve(), um den Pfad zu einer ausgewhlten Datei relativ zu einem angegebenen Verzeichnishandle zu finden.
async function returnPathDirectories(directoryHandle) {
// Get a file handle by showing a file picker:
const [handle] = await self.showOpenFilePicker();
if (!handle) {
// User cancelled, or otherwise failed to open a file.
return;
}
// Check if handle exists inside our directory handle
const relativePaths = await directoryHandle.resolve(handle);
if (relativePaths === null) {
// Not inside directory handle
} else {
// relativePaths is an array of names, giving the relative path
for (const name of relativePaths) {
// log each entry
console.log(name);
}
}
}
Die folgende asynchrone Funktion ffnet den Datei-Speicher-Dialog, der ein FileSystemFileHandle zurckgibt, sobald eine Datei ausgewhlt wird. Anschlieend wird ein schreibbarer Stream mit der Methode FileSystemFileHandle.createWritable() erstellt.
Ein benutzerdefinierter Blob wird dann in den Stream geschrieben, der anschlieend geschlossen wird.
async function saveFile() {
// create a new handle
const newHandle = await window.showSaveFilePicker();
// create a FileSystemWritableFileStream to write to
const writableStream = await newHandle.createWritable();
// write our file
await writableStream.write(imgBlob);
// close the file and write the contents to disk.
await writableStream.close();
}
Die folgenden Beispiele zeigen verschiedene Optionen, die in die Methode write() bergeben werden knnen.
// just pass in the data (no options)
writableStream.write(data);
// writes the data to the stream from the determined position
writableStream.write({ type: "write", position, data });
// updates the current file cursor offset to the position specified
writableStream.write({ type: "seek", position });
// resizes the file to be size bytes long
writableStream.write({ type: "truncate", size });
Dieses Beispiel liest und schreibt eine Datei synchron im origin private file system.
Der folgende asynchrone Ereignishandler befindet sich in einem Web Worker. Beim Empfang einer Nachricht vom Hauptthread:
ArrayBuffer, um sie zu enthalten.onmessage = async (e) => {
// retrieve message sent to work from main script
const message = e.data;
// Get handle to draft file in OPFS
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// Get sync access handle
const accessHandle = await draftHandle.createSyncAccessHandle();
// Get size of the file.
const fileSize = accessHandle.getSize();
// Read file content to a buffer.
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// Write the message to the end of the file.
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// Persist changes to disk.
accessHandle.flush();
// Always close FileSystemSyncAccessHandle if done.
accessHandle.close();
};
Hinweis:
In frheren Versionen der Spezifikation wurden close(), flush(), getSize() und truncate() unergonomisch als asynchrone Methoden spezifiziert. Dies wurde nun gendert, aber einige Browser untersttzen noch die asynchronen Versionen.
| Spezifikation |
|---|
| File System |
| File System Access |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |