最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

检索发布图片从MongoDB的(猫鼬)

IT培训 admin 4浏览 0评论

检索/发布图片从MongoDB的(猫鼬)

我一直在MongoDB中处理图像的工作在过去的一段时间了。每一个地方我一直只是希望说,由于每个文件的大小16MB克制使用GridFS的。然而,每个文档ID等存储为<16MB。我目前储存像这样

var testChamp = new Champion ({
    name: "Aatrox",
    img: fs.readFileSync("D:/CounterMe/Aatrox_0.jpg"),
    contentType: "jpg"
});
testChamp.save(function() {
    console.log("Saved");
}) 

在我的架构:

name: String,
img: Buffer,
contentType: String `

寻找在mongoshell此信息带来了CMD线的量巨大,所以林不知道如果IM甚至正确存放。如果我是,我不知道如何将其插入我的HTML。我知道如何检索名字,把它作为一个对象:

app.get("/", function(req, response) {
    Champion.find(function(err, champs) {            
        response.render("index", {
        champ: champs[0]
        });            
    });
});

但是,一旦我找回冠军[0] .IMG,即时通讯不知道该怎么办。我怎么给IMG传递到我的HTML?任何帮助,将不胜感激,我很难倒目前。

回答如下:

你真的不应该试图在HTML渲染。我见过的方法,他们都普遍不好,和一个很好的理由。

浏览器实现了高速缓存,因此任何“图像”已取回之前将在缓存中保留。但是,如果你以某种方式试图“嵌入”(通过Base64编码为例)你基本上丢掉那个缓冲能力,导致该数据与每个请求被发送的图像数据。

如果您必须存储在MongoDB中的图像以这种方式,那么你应该有你的API在一个单独的端点这将返回这将是基本上只是一个形象。因此,请所有的请求“看起来像”他们只是从Web服务器获取的图像。

首先改变你的数据一点点地反映这将是一个“文件名”:

var testChamp = new Champion ({
    name: "aatrox.jpg",
    img: fs.readFileSync("D:/CounterMe/Aatrox_0.jpg"),
    contentType: "image/jpg"
});

然后你会喜欢这个控制器代码:

app.get("/images/:image", function(req,res) {
    Champion.findOne({ "name": req.param.image },function(err,champ) {
       res.set("Content-Type", champ.contentType);
       res.send( champ.img );
    });
});

在你的模板,您然后就指的是图像的URL,你通常会。您可以添加到这一点,甚至可能是店里的东西,如内容长度,并设置在响应头为好。有迹象表明,可以使用从存储它们,以及之前通过另一API点上载的图像检测mime类型和尺寸的模块。周围有这些看一看。

这是有道理的,是比其他所有发送的图像数据的HTML内有效得多。

检索/发布图片从MongoDB的(猫鼬)

我一直在MongoDB中处理图像的工作在过去的一段时间了。每一个地方我一直只是希望说,由于每个文件的大小16MB克制使用GridFS的。然而,每个文档ID等存储为<16MB。我目前储存像这样

var testChamp = new Champion ({
    name: "Aatrox",
    img: fs.readFileSync("D:/CounterMe/Aatrox_0.jpg"),
    contentType: "jpg"
});
testChamp.save(function() {
    console.log("Saved");
}) 

在我的架构:

name: String,
img: Buffer,
contentType: String `

寻找在mongoshell此信息带来了CMD线的量巨大,所以林不知道如果IM甚至正确存放。如果我是,我不知道如何将其插入我的HTML。我知道如何检索名字,把它作为一个对象:

app.get("/", function(req, response) {
    Champion.find(function(err, champs) {            
        response.render("index", {
        champ: champs[0]
        });            
    });
});

但是,一旦我找回冠军[0] .IMG,即时通讯不知道该怎么办。我怎么给IMG传递到我的HTML?任何帮助,将不胜感激,我很难倒目前。

回答如下:

你真的不应该试图在HTML渲染。我见过的方法,他们都普遍不好,和一个很好的理由。

浏览器实现了高速缓存,因此任何“图像”已取回之前将在缓存中保留。但是,如果你以某种方式试图“嵌入”(通过Base64编码为例)你基本上丢掉那个缓冲能力,导致该数据与每个请求被发送的图像数据。

如果您必须存储在MongoDB中的图像以这种方式,那么你应该有你的API在一个单独的端点这将返回这将是基本上只是一个形象。因此,请所有的请求“看起来像”他们只是从Web服务器获取的图像。

首先改变你的数据一点点地反映这将是一个“文件名”:

var testChamp = new Champion ({
    name: "aatrox.jpg",
    img: fs.readFileSync("D:/CounterMe/Aatrox_0.jpg"),
    contentType: "image/jpg"
});

然后你会喜欢这个控制器代码:

app.get("/images/:image", function(req,res) {
    Champion.findOne({ "name": req.param.image },function(err,champ) {
       res.set("Content-Type", champ.contentType);
       res.send( champ.img );
    });
});

在你的模板,您然后就指的是图像的URL,你通常会。您可以添加到这一点,甚至可能是店里的东西,如内容长度,并设置在响应头为好。有迹象表明,可以使用从存储它们,以及之前通过另一API点上载的图像检测mime类型和尺寸的模块。周围有这些看一看。

这是有道理的,是比其他所有发送的图像数据的HTML内有效得多。

发布评论

评论列表 (0)

  1. 暂无评论