概述通过版本目录与元数据索引管理快照,可支持快速回滚与归档清理。版本化写入与索引async function writeVersioned(path, bytes) { const root = await navigator.storage.getDirectory(); const ver = 'v-' + Date.now(); const [dir, name] = (() => { const a = path.split('/'); return [a.slice(0,-1).join('/'), a[a.length-1]]; })(); let d = root; for (const seg of dir.split('/').filter(Boolean)) d = await d.getDirectoryHandle(seg, { create: true }); const verDir = await d.getDirectoryHandle(ver, { create: true }); const fh = await verDir.getFileHandle(name, { create: true }); const w = await fh.createWritable(); await w.write(bytes); await w.close(); const meta = await d.getFileHandle('versions.json', { create: true }); const mfile = await meta.getFile(); const list = mfile.size ? JSON.parse(await mfile.text()) : []; list.push({ ver, name, ts: Date.now() }); const mw = await meta.createWritable(); await mw.write(JSON.stringify(list)); await mw.close(); } 回滚到指定版本async function rollback(path, ver) { const root = await navigator.storage.getDirectory(); const [dir, name] = (() => { const a = path.split('/'); return [a.slice(0,-1).join('/'), a[a.length-1]]; })(); let d = root; for (const seg of dir.split('/').filter(Boolean)) d = await d.getDirectoryHandle(seg); const srcDir = await d.getDirectoryHandle(ver); const src = await srcDir.getFileHandle(name); const dst = await d.getFileHandle(name, { create: true }); const w = await dst.createWritable(); const f = await src.getFile(); await w.write(await f.arrayBuffer()); await w.close(); }

发表评论 取消回复