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

js
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ệ

SecurityError DOMException

Đượ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ư.

UnknownError DOMException

Đượ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ó:

  1. Lấy một FileSystemDirectoryHandle đại diện cho gốc của OPFS bằng getDirectory(), lưu nó vào biến root.
  2. Lấy một file handle bằng FileSystemDirectoryHandle.getFileHandle().
  3. Tạo một synchronous file access handle bằng FileSystemFileHandle.createSyncAccessHandle().
  4. Lấy kích thước của file và tạo một ArrayBuffer để chứa nó.
  5. Đọc và ghi vào file.
  6. Lưu các thay đổi xuống đĩa và đóng synchronous access handle.
js
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()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

Tương thích trình duyệt

Xem thêm