StorageManager: phương thức getDirectory()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2023.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Phương thức getDirectory() của giao diện StorageManager được dùng để lấy tham chiếu đến một đối tượng FileSystemDirectoryHandle, cho phép truy cập một thư mục và nội dung của nó, được lưu trong origin private file system (OPFS).
Cú pháp
getDirectory()
Tham số
Không có.
Giá trị trả về
Một Promise được thực thi thành công với một đối tượng FileSystemDirectoryHandle.
Ngoại lệ
SecurityErrorDOMException-
Được ném ra nếu trình duyệt không thể ánh xạ thư mục được yêu cầu tới OPFS cục bộ, ví dụ do giới hạn lưu trữ hoặc bộ nhớ. Cũng được ném ra trong một số trình duyệt nếu
getDirectory()được gọi trong chế độ duyệt riêng tư. UnknownErrorDOMException-
Được ném ra trong một số trình duyệt nếu
getDirectory()được gọi trong chế độ duyệt riêng tư.
Ví dụ
Hàm xử lý sự kiện bất đồng bộ sau đây nằm bên trong một Web Worker. Khi nhận một thông điệp từ luồng chính, nó:
- Lấy một
FileSystemDirectoryHandleđại diện cho gốc của OPFS bằnggetDirectory(), lưu nó vào biếnroot. - Lấy một file handle bằng
FileSystemDirectoryHandle.getFileHandle(). - Tạo một synchronous file access handle bằng
FileSystemFileHandle.createSyncAccessHandle(). - Lấy kích thước của file và tạo một
ArrayBufferđể chứa nó. - Đọc và ghi vào file.
- Lưu các thay đổi xuống đĩa và đóng synchronous access handle.
onmessage = async (e) => {
// Lấy thông điệp được gửi tới worker từ script chính
const message = e.data;
// Lấy handle tới file nháp
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// Lấy sync access handle
const accessHandle = await draftHandle.createSyncAccessHandle();
// Lấy kích thước của file.
const fileSize = accessHandle.getSize();
// Đọc nội dung file vào buffer.
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// Ghi thông điệp vào cuối file.
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// Lưu thay đổi xuống đĩa.
accessHandle.flush();
// Luôn đóng FileSystemSyncAccessHandle khi hoàn tất.
accessHandle.close();
};
Note:
Ở các phiên bản trước của đặc tả, close(), flush(), getSize() và truncate() bị đặc tả nhầm là các phương thức bất đồng bộ, và các phiên bản cũ của một số trình duyệt đã triển khai chúng theo cách đó. Tuy nhiên, mọi trình duyệt hiện tại hỗ trợ các phương thức này đều triển khai chúng như các phương thức đồng bộ.
Thông số kỹ thuật
| Specification |
|---|
| File System> # dom-storagemanager-getdirectory> |