从api返回图像二进制数据并在html上显示

时间:2017-12-28 14:09:00

标签: javascript node.js express mongoose

我正在mongodb数据库中存储图像。我想在客户端显示来自express api的响应作为图像。图像源看起来像这样

src="/image/data/5a44dde172aa021d107e7d33"

我发回这样的数据。当我将图像URL写入浏览器时,它什么也没显示。

var imgId = req.params.id;

imageModel.findById(imgId)
    .then((img) => {
        res.status(200).send(img.data);

    })
    .catch((exc) => {
        res.status(400).send();
    });

我上传了这样的文件。

router.post("/", upload.any(), (req, res) => {


    if (req.files && req.files.length > 0) {
        for (var i = 0; i < req.files.length; i++) {
            var file = req.files[i];

            var image = new imageModel({ data: file.buffer.toString(), name: file.fieldname, createdBy: req.user.id });
            image.save(function (err, img) {
                if (err)
                    res.status(400).send(err);
                else
                    res.status(200).send(response.create(img));
            });
        }
    }
});

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我通过改变

解决了这个问题
 file.buffer.toString()

 file.buffer.toString('binary')

关于文件上传代码和

res.status(200).send(img.data)

 res.status(200).contentType("image/jpeg").send(new Buffer(img.data.toString(), 'binary'))

关于获取api方法。它按预期工作,图像现在可以在页面上显示。