我已经在这里看到一个主题谈论同样的问题,但该分辨率不适用于我,因为我正在尝试打开一个字节数可变的图像。
代码:
router.get('/foto', function (req, res) {
const fdb = req.session.subdomain
const product = req.query.product
firebird.attach(conn(fdb), function (err, conn) {
if (err)
throw err;
conn.query('SELECT photo FROM product WHERE product = ?', product,
function (err, result) {
if (err) {
res.status(200).send(err);
} else {
console.log(result[0].PHOTO)
res.json(result[0].PHOTO)
conn.detach();
}
})
})
})
如果商品没有照片则返回null,如果有则返回:
[Function (anonymous)]
我需要知道如何将其读取为 Blob 以转换为 Base64,因为如果我尝试使用“[Function (anonymous)]”执行此操作,则将 Blob 转换为 Base64 会给出“错误:无效的 BLOB 句柄”。
转换blob的函数:
function readBlob(blob) {
if (blob == null) {
return null
}
blob(function (err, name, e) {
let buffers = [];
e.on('data', function (chunk) {
buffers.push(chunk);
});
e.on('end', function () {
let buffer = Buffer.concat(buffers);
console.log(buffer)
return buffer.toString('base64')
});
});
}
我正在使用 Node.js、Express 和 npm 模块 node-firebird。
我在C#的这个topic中找到了答案。问题出在我的查询中,在 Firebird 中我必须指定我希望它返回的数据格式,所以我将我的选择更改为:
SELECT cast(photo as BLOB SUB_TYPE BINARY) photo FROM product WHERE product = ?
然后当我使用“readBlob”函数时它就起作用了。