如何从缓冲区返回文件流?



我已经存储了我的图像,它的大小(以字节为单位(及其类型存储在mysql db上。

当我获取它时,我正在为图像取回一个缓冲区,现在我试图弄清楚如何将其发送回我的客户端以便它渲染图像?

我的路线内代码:

const img = await db.images.findByPk(parser.setValueAsBIN(p.id));
const myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({
frequency: 10, // in milliseconds.
chunkSize: img.Length, // in bytes.
});

myReadableStreamBuffer.put(img.dataValues.imageData);

下一步是什么?

如果我愿意登录myReadableStreamBuffer

我只是得到:

Readable {   _readableState:    ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
paused: true,
emitClose: true,
autoDestroy: false,
destroyed: false,
defaultEncoding: 'utf8',
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },   readable: true,   domain: null,   _events: [Object: null prototype] {},   _eventsCount: 0,   _maxListeners: undefined,   stopped: false,   stop: [Function],   size: [Function],   maxSize: [Function],   put: [Function],   _read: [Function] }

reply.send()方法中也加快支持流和缓冲区。

以下是管理它们的方法:


const fs = require('fs')
const { Readable } = require('stream')
const fastify = require('fastify')({ logger: true })
fastify.get('/', (req, reply) => {
const buffer = fs.readFileSync('demo.png')
reply.type('image/png') // if you don't set the content, the image would be downloaded by browser instead of viewed
reply.send(buffer)
})
fastify.get('/stream', (req, reply) => {
const buffer = fs.readFileSync('demo.png') // sync just for DEMO
const myStream = new Readable({
read () {
this.push(buffer)
this.push(null)
}
})
reply.type('image/png')
reply.send(myStream)
})
fastify.listen(3000)

(我会避免stream-buffers包,因为它似乎不再维护 - 问题未解决 - 并且 node.js 中的默认stream模块已得到极大改进(

相关内容

  • 没有找到相关文章

最新更新