/
simple.mjs
48 lines (39 loc) · 1.56 KB
/
simple.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { getPlatformProxy } from "wrangler"
const proxy = await getPlatformProxy({})
const bucket = proxy.env.BLOB
console.log('Fetching cat image...')
const imgReadableStream = await fetch('https://images.unsplash.com/photo-1579168765467-3b235f938439?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb&dl=yoo-hoo-E3LcqpQxtTU-unsplash.jpg').then(r => r.body)
console.log('Converting image to buffer...')
const buff = await readableStreamToBuff(imgReadableStream)
console.log('Buffer length (response):', buff.length)
console.log('Putting cats to the bucket...')
await bucket.put('cat1.jpg', buff.buffer)
await bucket.put('cat2.jpg', buff.buffer)
console.log('Reading from bucket...')
// This will make process hang
const [cat1, cat2] = await Promise.all([
bucket.get('cat1.jpg').then(obj => readableStreamToBuff(obj.body)),
bucket.get('cat2.jpg').then(obj => readableStreamToBuff(obj.body)),
])
// This works
// const cat1 = await bucket.get('cat1.jpg').then(obj => readableStreamToBuff(obj.body))
// const cat2 = await bucket.get('cat2.jpg').then(obj => readableStreamToBuff(obj.body))
console.log('Buffer length (bucket):', [cat1?.length, cat2?.length])
await proxy.dispose()
async function readableStreamToBuff(stream) {
console.log('reading stream to buffer... ')
const chunks = [];
await stream.pipeTo(
new WritableStream({
write(chunk) {
process.stdout.write(` +${chunk.length}`)
chunks.push(chunk);
},
close() {
console.log('stream close')
}
}),
)
console.log('stream read!')
return Buffer.concat(chunks);
}