检索/发布图片从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内有效得多。