改善 API 以在瀏覽器中使用檔案

支援 FileSystemSyncAccessHandle 的多個讀取器和寫入器,以及 FileSystemWritableFileStream 的專屬寫入器。

FileSystemSyncAccessHandle 的多個讀取器和寫入者

來源私人檔案系統 (有時也稱為值區檔案系統) 可讓開發人員存取經過最佳化處理的檔案,以便提升讀取和寫入效能。這項操作會透過 FileSystemSyncAccessHandle 物件執行。目前,嘗試為同一個檔案項目開啟多個 FileSystemSyncAccessHandle 物件時,會失敗並顯示 NoModificationAllowedError。由於有些情況會受到限制,因此 Chrome 121 針對 FileSystemFileHandle.createSyncAccessHandle() 方法導入了新的 mode 參數,並包含下列允許的字串值:

  • "readwrite":這是目前的預設值。開啟後,系統會允許 FileSystemSyncAccessHandle 上的任何方法。系統只允許一個 FileSystemSyncAccessHandle 例項。
  • "read-only":允許多個讀者。開啟後,系統只會允許 FileSystemSyncAccessHandle 上的類似讀取方法:read()getSize()close()。只要所有 FileSystemSyncAccessHandle 皆處於唯讀模式,即可建立多個 FileSystemSyncAccessHandle 例項。
  • "readwrite-unsafe":允許多位作者。開啟後,系統會允許 FileSystemSyncAccessHandle 上的任何方法。只要所有 FileSystemSyncAccessHandle 皆處於讀寫不安全模式,即可建立多個 FileSystemSyncAccessHandle 例項。

"readwrite" 選項設為預設值,即可保留目前的行為,也就是一次只允許一個執行個體。如果網站需要開啟多個 FileSystemSyncAccessHandle 物件,但不需要執行寫入作業,則應使用 "read-only" 選項。最後一個選項 "readwrite-unsafe" 允許多個例項,並同時允許讀取和寫入。在這種情況下,如果從多個分頁執行寫入作業,寫入作業可能會發生競爭條件,因此網站需要提供自己的鎖定配置。

const handle1 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
// This will succeed:
const handle2 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});

FileSystemWritableFileStream 專屬寫入者

FileSystemSyncAccessHandle 不同,現在每個檔案項目都可以建立多個 FileSystemWritableFileStream 例項。缺少的是提供專屬作者選項的方式。Chrome 121 會在 FileSystemAccessFileHandle.createWritable() 方法中新增選用的 mode 參數,該參數具有以下值:

  • "exclusive" 模式:一次只能有一位寫入者。
  • "siloed" 模式:這是目前的預設模式。每個建立的寫入器都會有專屬的交換檔案。
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();

瀏覽器支援

自 Chrome 121 起,系統支援 FileSystemSyncAccessHandle 的多位讀者和作家,以及 FileSystemWritableFileStream 的專屬作家。

進入開發人員試用階段

如要在 Chrome 121 推出前進入開發人員試用版來測試這項功能,請將 chrome://flags 中的 #file-system-access-locking-scheme 標記設為「Enabled」。這樣一來,您就能在本機上測試這項功能。

特別銘謝

本文由 Daseul LeeNathan MemmottRachel Andrew 共同審查。