Skip to content

Commit 25e5f69

Browse files
authored
Create test.html
1 parent e250cea commit 25e5f69

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

test.html

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>OPFS Worker Image Demo</title>
5+
</head>
6+
<body>
7+
<button onclick="handleImageSave()">Save Image to OPFS</button>
8+
<button onclick="handleImageLoad()">Load Image from OPFS</button>
9+
<div id="image-container"></div>
10+
11+
<script>
12+
const worker = new Worker('worker.js');
13+
const FILE_ID = 'stored-image';
14+
let currentExtension = '';
15+
16+
worker.onmessage = (e) => {
17+
const { action } = e.data;
18+
switch (action) {
19+
case 'encoded':
20+
console.log('File saved to OPFS:', e.data);
21+
break;
22+
case 'decoded':
23+
handleDecodedImage(e.data);
24+
break;
25+
case 'error':
26+
console.error('Worker error:', e.data);
27+
break;
28+
}
29+
};
30+
31+
async function handleImageSave() {
32+
try {
33+
const [fileHandle] = await window.showOpenFilePicker({
34+
types: [{
35+
description: 'Images',
36+
accept: {'image/*': ['.png', '.jpg', '.jpeg', '.gif']}
37+
}]
38+
});
39+
40+
const file = await fileHandle.getFile();
41+
currentExtension = file.name.split('.').pop();
42+
const buffer = await file.arrayBuffer();
43+
44+
worker.postMessage({
45+
action: 'encode',
46+
id: FILE_ID,
47+
data: new Uint8Array(buffer),
48+
extension: currentExtension
49+
}, [buffer]);
50+
51+
} catch (error) {
52+
if (error.name !== 'AbortError') {
53+
console.error('File selection error:', error);
54+
}
55+
}
56+
}
57+
58+
function handleImageLoad() {
59+
worker.postMessage({
60+
action: 'decode',
61+
id: FILE_ID,
62+
extension: currentExtension
63+
});
64+
}
65+
66+
function handleDecodedImage({ data, extension }) {
67+
const container = document.getElementById('image-container');
68+
container.innerHTML = '';
69+
70+
const blob = new Blob([data], { type: getMimeType(extension) });
71+
const url = URL.createObjectURL(blob);
72+
73+
const img = new Image();
74+
img.src = url;
75+
img.alt = 'OPFS Image';
76+
img.style.maxWidth = '100%';
77+
78+
img.onload = () => URL.revokeObjectURL(url);
79+
container.appendChild(img);
80+
}
81+
82+
function getMimeType(extension) {
83+
return {
84+
'png': 'image/png',
85+
'jpg': 'image/jpeg',
86+
'jpeg': 'image/jpeg',
87+
'gif': 'image/gif'
88+
}[extension.toLowerCase()] || 'application/octet-stream';
89+
}
90+
</script>
91+
</body>
92+
</html>

0 commit comments

Comments
 (0)