FileSystemSyncAccessHandle: write() method

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 only available in Dedicated Web Workers.

Phương thức write() của giao diện FileSystemSyncAccessHandle ghi nội dung của một buffer được chỉ định vào tệp liên kết với handle, tùy chọn tại một offset nhất định.

Các tệp trong hệ thống tệp riêng tư của nguồn gốc không hiển thị cho người dùng cuối, do đó không phải chịu các kiểm tra bảo mật giống như các phương thức chạy trên tệp trong hệ thống tệp hiển thị cho người dùng. Do đó, các lệnh ghi thực hiện bằng FileSystemSyncAccessHandle.write() có hiệu suất cao hơn nhiều.

Cú pháp

js
write(buffer, options)

Tham số

buffer

Một ArrayBuffer hoặc ArrayBufferView (chẳng hạn DataView) đại diện cho buffer cần ghi vào tệp.

options Optional

Một đối tượng tùy chọn chứa các thuộc tính sau:

at

Một số đại diện cho offset tính bằng byte từ đầu tệp mà buffer sẽ được ghi vào.

Note: Bạn không thể thao tác trực tiếp nội dung của ArrayBuffer. Thay vào đó, hãy tạo một đối tượng mảng có kiểu như Int8Array hoặc đối tượng DataView đại diện cho buffer ở định dạng cụ thể.

Giá trị trả về

Một số đại diện cho số byte được ghi vào tệp.

Ngoại lệ

InvalidStateError DOMException

Được ném ra nếu access handle liên kết đã bị đóng, hoặc nếu việc sửa đổi dữ liệu nhị phân của tệp hoàn toàn thất bại.

QuotaExceededError

Được ném ra nếu dung lượng dữ liệu tăng thêm vượt quá hạn ngạch lưu trữ của trình duyệt.

TypeError

Được ném ra nếu hệ thống tệp cơ bản không hỗ trợ ghi tệp từ offset tệp được chỉ định.

Ví dụ

Hàm xử lý sự kiện bất đồng bộ dưới đây nằm trong một Web Worker. Khi nhận thông báo từ luồng chính, nó ghi thông báo vào cuối tệp:

js
onmessage = async (e) => {
  // Retrieve message sent to work from main script
  const message = e.data;

  // Get handle to draft file
  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();
};

Note: Trong các phiên bản trước của đặc tả, close(), flush(), getSize(), và truncate() được chỉ định sai là phương thức bất đồng bộ. Tuy nhiên, tất cả các trình duyệt hiện tại hỗ trợ các phương thức này đều triển khai chúng là phương thức đồng bộ.

Thông số kỹ thuật

Specification
File System
# api-filesystemsyncaccesshandle-write

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

Xem thêm