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

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

多個讀取器和寫入者適用於 FileSystemSyncAccessHandle

來源私人檔案系統 (有時也稱為值區檔案系統) 可讓開發人員存取專為最大讀取和寫入效能最佳化的檔案。這會透過 FileSystemSyncAccessHandle 物件發生。目前,嘗試為同一個檔案項目開啟多個 FileSystemSyncAccessHandle 物件會失敗,並顯示 NoModificationAllowedError。由於這項限制有限制的情況,因此 Chrome 121 針對 FileSystemFileHandle.createSyncAccessHandle() 方法推出新的 mode 參數,其中包含以下允許的字串值:

  • "readwrite":這是目前的預設值。開啟後,即可允許 FileSystemSyncAccessHandle 的所有方法。只能有一個 FileSystemSyncAccessHandle 執行個體。
  • "read-only":允許多位讀者。開啟後,您只能在 FileSystemSyncAccessHandle 上使用類似讀取的方法:read()getSize()close()。只要所有 FileSystemSyncAccessHandle 執行個體都是唯讀模式,就可以建立多個執行個體。
  • "readwrite-unsafe":允許多位寫入者。開啟後,即可允許 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 標記設為「已啟用」。這可讓您在本機上測試這項功能。

特別銘謝

這篇文章是由 Daseul LeeNathan MemmottRachel Andrew 評論。