StorageManagerï¼getDirectory() æ¹æ³
åºçº¿
广æ³å¯ç¨
èª 2023å¹´3æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
å®å ¨ä¸ä¸æ: æ¤ç¹æ§ä» å¨ä¸äºæ¯æçæµè§å¨çå®å ¨ä¸ä¸æï¼HTTPSï¼ä¸å¯ç¨ã
夿³¨ï¼ æ¤ç¹æ§å¨ Web Worker ä¸å¯ç¨ã
StorageManager æ¥å£ç getDirectory() æ¹æ³ç¨äºè·å对 FileSystemDirectoryHandle 对象çå¼ç¨ï¼è¯¥å¯¹è±¡å
许访é®åå¨å¨æºç§ææä»¶ç³»ç»ï¼OPFSï¼ä¸çç®å½åç®å½çå
容ã
è¯æ³
getDirectory()
åæ°
æ ã
è¿åå¼
ä¸ä¸ªå
ç° FileSystemDirectoryHandle 对象ç Promiseã
å¼å¸¸
SecurityErrorDOMException-
å¦æç¨æ·ä»£çæ æ³å°è¯·æ±çç®å½æ å°å°æ¬å°ç OPFSï¼åæåºæ¤å¼å¸¸ã
示ä¾
以ä¸å¼æ¥äºä»¶å¤ç彿°å å«å¨ Web Worker ä¸ãä»ä¸»çº¿ç¨æ¶å°æ¶æ¯åï¼
- 使ç¨
getDirectory()è·å表示 OPFS æ ¹ç®å½çFileSystemDirectoryHandleï¼å¹¶å°å ¶åå¨å¨rootåéä¸ã - 使ç¨
FileSystemDirectoryHandle.getFileHandle()è·åæä»¶å¥æã - 使ç¨
FileSystemFileHandle.createSyncAccessHandle()åå»ºåæ¥æä»¶è®¿é®å¥æã - è·åæä»¶ç大å°å¹¶å建ä¸ä¸ª
ArrayBufferæ¥å å«å®ã - 读åååå ¥æä»¶ã
- å°æ´æ¹ä¿åå°ç£çå¹¶å ³éåæ¥è®¿é®å¥æã
onmessage = async (e) => {
// ä»ä¸»çº¿ç¨æ£ç´¢åéå° worker çæ¶æ¯
const message = e.data;
// è·åè稿æä»¶ç奿
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// è·ååæ¥è®¿é®å¥æ
const accessHandle = await draftHandle.createSyncAccessHandle();
// è·åæä»¶ç大å°
const fileSize = accessHandle.getSize();
// å°æä»¶å
容读åå°ç¼å²åº
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// å°æ¶æ¯åå
¥æä»¶æ«å°¾
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// å°æ´æ¹ä¿åå°ç£ç
accessHandle.flush();
// 妿宿ï¼è¯·å§ç»å
³é FileSystemSyncAccessHandle
accessHandle.close();
};
夿³¨ï¼å¨è§èçæ©æçæ¬ä¸ï¼close()ãflush()ãgetSize() å truncate() 被éè¯¯å°æå®ä¸ºå¼æ¥æ¹æ³ï¼å¹¶ä¸æäºè¾æ§çæ¬çæµè§å¨ä»¥è¿ç§æ¹å¼å®ç°å®ä»¬ãç¶èï¼å½åæææ¯æè¿äºæ¹æ³çæµè§å¨é½å°å®ä»¬å®ç°ä¸ºåæ¥æ¹æ³ã
è§è
| è§è |
|---|
| File System > # dom-storagemanager-getdirectory > |