Firebird jpeg blob 字段在 node.js 上作为“[函数(匿名)]”返回

问题描述 投票:0回答:1

我已经在这里看到一个主题谈论同样的问题,但该分辨率不适用于我,因为我正在尝试打开一个字节数可变的图像。

代码:

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。

node.js blob firebird node-firebird
1个回答
0
投票

我在C#的这个topic中找到了答案。问题出在我的查询中,在 Firebird 中我必须指定我希望它返回的数据格式,所以我将我的选择更改为:

SELECT cast(photo as BLOB SUB_TYPE BINARY) photo FROM product WHERE product = ?

然后当我使用“readBlob”函数时它就起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.