å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
ãã¡ã¤ã«ã·ã¹ãã API 㯠- ãã¡ã¤ã«ã·ã¹ãã ã¢ã¯ã»ã¹ API ãä»ãã¦æä¾ãããæ¡å¼µæ©è½ã«ãã - 端æ«ã®ãã¡ã¤ã«ã·ã¹ãã ä¸ã®ãã¡ã¤ã«ã«ã¢ã¯ã»ã¹ããèªã¿åããæ¸ãè¾¼ã¿ããã¡ã¤ã«ç®¡çæ©è½ã使ç¨ãããã¨ãã§ãã¾ãã
æ¦å¿µã¨ä½¿ç¨æ³ãã® API ãç¨ããã¨ãã¦ã¼ã¶ã¼ã®ãã¼ã«ã«ããã¤ã¹ä¸ã®ãã¡ã¤ã«ããã¦ã¼ã¶ã¼ãã¢ã¯ã»ã¹å¯è½ãªãããã¯ã¼ã¯ãã¡ã¤ã«ã·ã¹ãã ãæä½ãããã¨ãã§ãã¾ãããã® API ã®åºæ¬æ©è½ã¨ãã¦ããã¡ã¤ã«ã®èªã¿è¾¼ã¿ããã¡ã¤ã«ã®æ¸ãè¾¼ã¿ï¼ä¿åï¼ããã£ã¬ã¯ããªã¼æ§é ã¸ã®ã¢ã¯ã»ã¹ãããã¾ãã
ãã¡ã¤ã«ããã£ã¬ã¯ããªã¼ã®æä½ã®ã»ã¨ãã©ã¯ããã³ãã«ãä»ãã¦è¡ãã¾ãã親ã¯ã©ã¹ã® FileSystemHandle
ã®è£å©ã«ãã FileSystemFileHandle
ããã³ FileSystemDirectoryHandle
ã® 2 åã®åã¯ã©ã¹ãå®ç¾©ããã¦ããããããããã¡ã¤ã«ããã³ãã£ã¬ã¯ããªã¼ã®æä½ã«ç¨ãã¾ãã
ãã³ãã«ã¯ãã¦ã¼ã¶ã¼ã®ã·ã¹ãã ä¸ã®ãã¡ã¤ã«ããã£ã¬ã¯ããªã¼ã表ãã¾ããã¾ããwindow.showOpenFilePicker()
ã window.showDirectoryPicker()
ãªã©ã®ã¡ã½ãããç¨ãã¦ã¦ã¼ã¶ã¼ã«ãã¡ã¤ã«ããã«ã¼ã¾ãã¯ãã£ã¬ã¯ããªã¼ããã«ã¼ã表示ãããã¡ã¤ã«ããã£ã¬ã¯ããªã¼ã¸ã®ã¢ã¯ã»ã¹æ¨©ãå¾ããã¨ãã§ãã¾ãããããã®ã¡ã½ãããå¼ã°ããã¨ããã¡ã¤ã«ããã«ã¼ãç¾ããã¦ã¼ã¶ã¼ããã¡ã¤ã«ã¾ãã¯ãã£ã¬ã¯ããªã¼ã鏿ãã¾ãããã®æµãããã¾ãããã¨ããã³ãã«ãè¿ããã¾ãã
以ä¸ã®æ¹æ³ã«ãããã¡ã¤ã«ãã³ãã«ã¸ã®ã¢ã¯ã»ã¹æ¨©ãå¾ããã¨ãã§ãã¾ãã
DataTransferItem.getAsFileSystemHandle()
ã¡ã½ããããããã®ãã³ãã«ãèªèº«ã®æ©è½ãæä¾ããã©ã£ã¡ã使ã£ã¦ãããã«ãã£ã¦å°ãéããããã¾ãï¼è©³ç´°ã¯ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ç¯ãåç §ãã¦ãã ããï¼ããã¡ã¤ã«ã®ãã¼ã¿ãã鏿ããããã£ã¬ã¯ããªã¼ã®æ å ±ï¼åãå«ãï¼ã«ã¢ã¯ã»ã¹ã§ãã¾ãããã® API ã«ãããã¦ã§ãã«æ¬ ãã¦ããæ½å¨çãªæ©è½ã¸ã®éãéãã¾ããããã§ããã»ãã¥ãªãã£ã¯ API ã®è¨è¨æã«æå¤§éèæ ®ããã¹ããã¨ã§ããããã¡ã¤ã«ããã£ã¬ã¯ããªã¼ã®ãã¼ã¿ã¸ã®ã¢ã¯ã»ã¹ã¯ã¦ã¼ã¶ã¼ãç¹ã«è¨±å¯ããªãéãç¦æ¢ããã¦ãã¾ãï¼ããã¯ãã¦ã¼ã¶ã¼ããè¦ããªããªãªã¸ã³ãã©ã¤ãã¼ããã¡ã¤ã«ã·ã¹ãã ã®å ´åã¨ã¯ç°ãªãã¾ãï¼ã
ã¡ã¢: API ã®æ©è½ã使ãéã«æããããå¯è½æ§ãããä¾å¤ã¯ã仿§æ¸ã§ã®å®ç¾©ã«æ²¿ã£ã¦é¢é£ãããã¼ã¸ã«ä¸è¦§ãè¼ã£ã¦ãã¾ãããããã API ã¨ä¸å±¤ã®ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã®ç¸äºä½ç¨ã«ãããç¶æ³ã¯ããè¤éã«ãªãã¾ãã仿§æ¸ã§ã¨ã©ã¼ã®å¯¾å¿é¢ä¿ãä¸è¦§ã«ããããã®ææ¡ããªããã¦ãããããã«æç¨ãªé¢é£æ å ±ãããã¾ãã
ã¡ã¢: FileSystemHandle
ããã¼ã¹ã¨ãããªãã¸ã§ã¯ãã¯ãIndexedDB ã®ãã¼ã¿ãã¼ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã«ã·ãªã¢ã©ã¤ãºããããpostMessage()
ãä»ãã¦è»¢éãããã§ãã¾ãã
ãªãªã¸ã³ãã©ã¤ãã¼ããã¡ã¤ã«ã·ã¹ãã (OPFS) ã¯ããã¼ã¸ã®ãªãªã¸ã³åºæã®ã¹ãã¬ã¼ã¸ã®ã¨ã³ããã¤ã³ãã§ãããããã©ã¼ãã³ã¹ã«é«åº¦ã«æé©åãããç¹å¥ãªç¨®é¡ã®ãã¡ã¤ã«ã¸ã®ã¢ã¯ã»ã¹ã鏿å¯è½ã§ããä¾ãã°ããã¡ã¤ã«ã®å 容ããã®å ´ (in-place) ã§æä»çã«æ¸ãæãããã¨ãã§ãã¾ãã
ä½¿ãæ¹ã®èª¬æã¯ããªãªã¸ã³ãã©ã¤ãã¼ããã¡ã¤ã«ã·ã¹ãã ãèªãã§ãã ããã
ãã¡ã¤ã«ã®ä¿åFileSystemWritableFileStream
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ãã¾ããä¿åããããã¼ã¿ã Blob
ãString
ãªãã¨ã¯ããæååãªãã©ã«ãbuffer
ã®ããããã®å½¢å¼ã«ããããã¹ããªã¼ã ãéãã¦ãã¼ã¿ããã¡ã¤ã«ã«ä¿åã§ãã¾ããæ¢åã®ãã¡ã¤ã«ãæ°ãããã¡ã¤ã«ãä¿åå
ã«ã§ãã¾ããFileSystemSyncAccessHandle
ã§ã¯ãwrite()
ã¡ã½ãããç¨ãã¦å¤æ´ããã¡ã¤ã«ã«æ¸ãè¾¼ã¿ã¾ããç¹å®ã®ã¿ã¤ãã³ã°ã§å¤æ´ããã£ã¹ã¯ã«æ¸ãè¾¼ã¿ããå ´åã¯ãflush()
ãå¼ã¶ãã¨ãã§ãã¾ãã(ãããå¼ã°ãªãå ´åãä¸å±¤ã®ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã«ä»»ãã¦é½åã®ããã¨ãã«å¦çããããã¨ãã§ããã»ã¨ãã©ã®å ´åã¯ããã§ããã§ããã)FileSystemHandle
FileSystemHandle
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãé
ç®ã表ããªãã¸ã§ã¯ãã§ããè¤æ°ã®ãã³ãã«ãåãé
ç®ã表ããã¨ãããã¾ããã»ã¨ãã©ã®å ´é¢ã§ã¯ãFileSystemHandle
ãç´æ¥æ±ããã¨ã¯ãªããåã¤ã³ã¿ã¼ãã§ã¤ã¹ã® FileSystemFileHandle
ã FileSystemDirectoryHandle
ãæ±ããã¨ã«ãªãã§ãããã
FileSystemFileHandle
ãã¡ã¤ã«ã·ã¹ãã ã®é ç®ã表ããã³ãã«ãæä¾ãã¾ãã
FileSystemDirectoryHandle
ãã¡ã¤ã«ã·ã¹ãã ã®ãã£ã¬ã¯ããªã¼ã表ããã³ãã«ãæä¾ãã¾ãã
FileSystemSyncAccessHandle
ãã£ã¹ã¯ä¸ã®åä¸ã®ãã¡ã¤ã«ããã®å ´ (in-place) ã§æä½ããããã¡ã¤ã«ã·ã¹ãã ã®é ç®ã¸ã®åæçã«ãã³ãã«ãæä¾ãã¾ãããã®ãã¡ã¤ã«ã®èªã¿æ¸ããåæçã«è¡ããæ§è³ªã¯ãWebAssembly ãªã©ã®éåææä½ã大ããªãªã¼ãã¼ãããã«ç¹ããå ´é¢ã«ãããéè¦ãªã¡ã½ããã§å¦çå¹çãé«ãããã¨ãå¯è½ã«ãã¾ãããã®ã¯ã©ã¹ã¯ãããç¨ã®ã¦ã§ãã¯ã¼ã«ã¼å ã§ãªãªã¸ã³ãã©ã¤ãã¼ããã¡ã¤ã«ã·ã¹ãã å ã®ãã¡ã¤ã«ãæ±ãå ´åã®ã¿ä½¿ç¨å¯è½ã§ãã
FileSystemWritableFileStream
ãã£ã¹ã¯ä¸ã®åä¸ã®ãã¡ã¤ã«ãæä½ãã便å©ãªé¢æ°ã追å ããã WritableStream
ã§ãã
以ä¸ã®ã³ã¼ãã§ãã¦ã¼ã¶ã¼ã«ãã¡ã¤ã«ããã«ã¼ã§ãã¡ã¤ã«ãé¸ã°ãããã¨ãã§ãã¾ãã
async function getFile() {
// ãã¡ã¤ã«ããã«ã¼ãéããçµæãåè§£ãã¦æåã®ãã³ãã«ãåãåºã
const [fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
return file;
}
以ä¸ã®éåæé¢æ°ã¯ããã¡ã¤ã«ããã«ã¼ãéãããã¡ã¤ã«ãé¸ã°ããã getFile()
ã¡ã½ãããç¨ãã¦å
容ãåå¾ãã¾ãã
const pickerOpts = {
types: [
{
description: "Images",
accept: {
"image/*": [".png", ".gif", ".jpeg", ".jpg"],
},
},
],
excludeAcceptAllOption: true,
multiple: false,
};
async function getTheFile() {
// ãã¡ã¤ã«ããã«ã¼ãéããçµæãåè§£ãã¦æåã®ãã³ãã«ãåãåºã
const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
// ãã¡ã¤ã«ã®å
容ãå¾ã
const fileData = await fileHandle.getFile();
}
ãã£ã¬ã¯ããªã¼ã«ã¢ã¯ã»ã¹ãã
以ä¸ã®ä¾ã§ã¯ãååãæå®ãããã£ã¬ã¯ããªã¼ãã³ãã«ãè¿ãã¾ããæå®ã®ãã£ã¬ã¯ããªã¼ãåå¨ããªãå ´åã¯ã使ããã¾ãã
const dirName = "directoryToGetName";
// 'currentDirHandle' ã¨ãããã£ã¬ã¯ããªã¼ãã³ãã«ãããã¨ä»®å®ãã¦ãã
const subDir = currentDirHandle.getDirectoryHandle(dirName, { create: true });
以ä¸ã®éåæé¢æ°ã¯ãresolve()
ãç¨ãã¦é¸ã°ãããã¡ã¤ã«ã®æå®ã®ãã£ã¬ã¯ããªã¼ããã®ç¸å¯¾ãã¹ãæ±ãã¾ãã
async function returnPathDirectories(directoryHandle) {
// ãã¡ã¤ã«ããã«ã¼ãéãããã¡ã¤ã«ãã³ãã«ãå¾ã
const [handle] = await self.showOpenFilePicker();
if (!handle) {
// ã¦ã¼ã¶ã¼ããã£ã³ã»ã«ãããããã¡ã¤ã«ãéãã®ã«å¤±æãã
return;
}
// ãã³ãã«ãæå
ã®ãã£ã¬ã¯ããªã¼ãã³ãã«ã表ããã£ã¬ã¯ããªã¼å
ã«ãããããã§ãã¯ãã
const relativePaths = await directoryHandle.resolve(handle);
if (relativePaths === null) {
// ãã£ã¬ã¯ããªã¼ãã³ãã«å
ã«ç¡ã
} else {
// relativePaths ã¯ãç¸å¯¾ãã¹ã表ãååã®é
å
for (const name of relativePaths) {
// åé
ç®ãè¨é²ãã
console.log(name);
}
}
}
ãã¡ã¤ã«ã«æ¸ãè¾¼ã
以ä¸ã®éåæé¢æ°ã¯ä¿åç¨ã®ãã¡ã¤ã«ããã«ã¼ãéããããã¯ãã¡ã¤ã«ã鏿ããã㨠FileSystemFileHandle
ãè¿ãã¾ãããã®å¾ãFileSystemFileHandle.createWritable()
ã¡ã½ããã«ããæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ãçæãã¾ãã
ããã¦ãã¦ã¼ã¶ã¼å®ç¾©ã® Blob
ãã¹ããªã¼ã ã«æ¸ãè¾¼ã¿ãç¶ãã¦ã¹ããªã¼ã ãéãã¾ãã
async function saveFile() {
// æ°ãããã³ãã«ãçæãã
const newHandle = await window.showSaveFilePicker();
// æ¸ãè¾¼ã¿å
ã¨ãªã FileSystemWritableFileStream ãçæãã
const writableStream = await newHandle.createWritable();
// ãã¡ã¤ã«ãæ¸ãè¾¼ã
await writableStream.write(imgBlob);
// ãã¡ã¤ã«ãéããå
容ããã£ã¹ã¯ã«æ¸ãè¾¼ã
await writableStream.close();
}
以ä¸ã¯ãwrite()
ã¡ã½ããã«æ¸¡ããã¨ãã§ãããªãã·ã§ã³ã®ç°ãªãä¾ã§ãã
// ãã¼ã¿ã®ã¿ã渡ã (ãªãã·ã§ã³ãªã)
writableStream.write(data);
// ã¹ããªã¼ã ã«æå®ã®ä½ç½®ãããã¼ã¿ãæ¸ãè¾¼ã
writableStream.write({ type: "write", position, data });
// ç¾å¨ã®ãã¡ã¤ã«ã«ã¼ã½ã«ã®ä½ç½®ãæå®ã®ä½ç½®ã«æ´æ°ãã
writableStream.write({ type: "seek", position });
// ãã¡ã¤ã«ã size ãã¤ãã«ãªãµã¤ãºãã
writableStream.write({ type: "truncate", size });
OPFS å
ã®ãã¡ã¤ã«ãåæçã«èªã¿æ¸ããã
ãã®ä¾ã§ã¯ããªãªã¸ã³ãã©ã¤ãã¼ããã¡ã¤ã«ã·ã¹ãã å ã®ãã¡ã¤ã«ãåæçã«èªã¿æ¸ããã¾ãã
以ä¸ã®éåæã®ã¤ãã³ããã³ãã©ã¼é¢æ°ã¯ãã¦ã§ãã¯ã¼ã«ã¼å ã«ããã¾ããã¡ã¤ã³ã¹ã¬ããããã¡ãã»ã¼ã¸ãåä¿¡ããæã以ä¸ã®å¦çããã¾ãã
ArrayBuffer
ãçæããonmessage = async (e) => {
// ã¡ã¤ã³ã¹ã¬ããããéãããå¦ç対象ã®ã¡ãã»ã¼ã¸ãåå¾ãã
const message = e.data;
// OPFS å
ã® draft ãã¡ã¤ã«ã®ãã³ãã«ãå¾ã
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()
ã¯äººéå·¥å¦ã«åãã¦éåæã¡ã½ããã¨ããã¦ãã¾ãããããã¯ç¾å¨ã§ã¯å¤æ´ããã¦ãã¾ãããã¾ã éåæãã¼ã¸ã§ã³ããµãã¼ããã¦ãããã©ã¦ã¶ã¼ãããã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4