从MongoDB(猫鼬)检索/发布图像
Retrieving/Posting Images From MongoDB (mongoose)
我一直试图在mongodb的图像工作,而过去,现在。我一直在寻找的每个地方都说使用GridFS,因为每个文档的大小限制为16mb。但是,我想要存储的每个文档是16mb。我现在是这样存储的
var testChamp = new Champion ({
name: "Aatrox",
img: fs.readFileSync("D:/CounterMe/Aatrox_0.jpg"),
contentType: "jpg"
});
testChamp.save(function() {
console.log("Saved");
})
In my schema:
name: String,
img: Buffer,
contentType: String `
在mongoshell中找到这个信息会在cmd中产生大量的行,所以我不确定我是否正确地存储它。如果我是,我不知道如何将它插入到我的html。我知道如何检索名称,将其作为对象传入:
app.get("/", function(req, response) {
Champion.find(function(err, champs) {
response.render("index", {
champ: champs[0]
});
});
});
然而,一旦我检索champs[0]。我,我不知道该怎么办。我应该如何将img传递到我的HTML中?如果有任何帮助,我将不胜感激,我现在非常困惑。
你真的不应该尝试用HTML来呈现。我看过一些方法,它们通常都很糟糕,而且有一个很好的理由。
浏览器实现了缓存,因此它之前检索到的任何"图像"都将保存在缓存中。但是,如果你以某种方式试图"嵌入"图像数据(例如通过Base64编码),你基本上是抛弃了缓存功能,并导致每个请求都发送该数据。
如果你必须以这种方式在MongoDB中存储图像,那么你应该在你的API中有一个单独的端点,它将返回基本上只是一个图像。所以让所有的请求"看起来像"他们只是从web服务器获取图像。
首先稍微改变一下你的数据,以反映什么是"filename":
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。你可以添加甚至可能存储内容长度之类的东西并在响应header中设置。您可以使用一些模块来检测通过另一个API点上传的图像的mime类型和大小,然后再存储它们。看看这些
这是有意义的,并且比在HTML中发送所有图像数据要有效得多。
当我第一次进入web开发时,我问过这个问题。5年后再回过头来看,我的方法绝对是错误的。我试图将我的图像本身存储在mongodb中,当我应该将它们存储在像S3这样的存储服务中时,然后只是将url存储到mongodb中的图像。希望这对遇到这种情况的人有所帮助!
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 画布数据到图像
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 使图像在单击时展开到不大于浏览器
- Html页面上的多个Base64图像和平滑加载
- UIAutomation放大图像
- JavaScript 使用 url 上传图像(图像已经在互联网上,不同的域)
- 使用JavaScript更改背景图像图像以进行图像幻灯片
- 尝试为石头剪刀布游戏显示图像而不是字母
- 上传前无法显示图像图像
- 编辑图像/图像详细信息-替换按钮缺失
- 在缩略图上更改滑块图像.图像改变一秒钟,然后恢复
- 在jQuery中移动图像(图像裁剪)
- 而不是提示从图像中选择石头,布,剪刀等游戏