我是节点js的新用户,我正在创建一个简单的应用程序,用户将在其中创建一个包含详细信息的帐户,我在后端使用了mongodb来存储用户的详细信息,他的名字是电子邮件等。
创建acccont后,我将其重定向到用户必须登录的登录页面,登录成功后,用户将被重定向到配置文件,现在我正在使用会话显示他的名字。
现在我想要的是,我想在帐户创建时上传用户的图片,我想知道如何将其链接到我的帐户创建表单,如截图所示,同时将其保存到mongodb。
我想在用户登录时将该用户的图片显示为个人资料图片,并将其重定向到其个人资料页面。
我在mongodb上找到了很多关于保存图片的链接,但无法获得任何帮助,我还附上了个人资料页面截图。
我该如何实现?
个人资料页面
答案 0 :(得分:0)
如果你真的想将个人资料图片保存到MongoDB中。我建议你通过When should I use GridFS?
然后决定允许用户上传的个人资料图片的最大尺寸
MongoDB BSON个文件的上限为16MB。因此,如果用户的整个文档总数不超过16MB,则可以使用BinData数据类型将它们直接存储在文档中。
图像/视频/ PDF / Ppt /电子表格等 - 它永远不会重要,它们可以以相同的方式存储。您的应用程序可以在标题中返回适当的内容类型,以便在您的Web应用程序中正确显示。
快乐编码.. :)
<小时/> 的更新强> 为此,您需要对图像数据进行base64编码,如下所示:
var base64Image = new Buffer(uploadedFilesData,'binary')。toString('base64');
然后使用Mongo的BinData
类型存储它,然后将其保存为BSON位数组,而不是实际存储base64
字符串,因此大小不会比原始二进制图像大。当您从MongoDB读取并希望用作图像时,您可以执行以下操作:
app.get('/getimage', function(req, res) {
db.collection.find({'imgId':req.params.id}, function(err,data) {
var base64Image = var img = new Buffer(data.imgDataField, 'base64');
res.writeHead(200, {
'Content-Type': 'image/jpeg',
'Content-Length': base64Image.buffer.length
});
res.end(base64Image.buffer);
}
}
客户端您应该显示base64Image
数据,如:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAB50RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNS4xqx9I6wAAAVBJREFUOI2tlLFKA0EQhr+9i2J1kBDFYG91gYRA0ngpJELQ2KSwlFjYKIidlZVvIFgEXyBYaBH0ESysLATBPiRYWFgEye7eWkSimL1wyg1MM//Mx87O7ghjjCEhc5ICJQ5LRQm9/oDLqzsenl4QgAHK/ir7O5us5JatNcJ2Z73+gKOzCz6kQjguQoAxYELNwlyK89NDK9DaZrvTZTiS4LggBAYBQoDjMhxJ2p1u/DbvH59xU/MYrac0Y8Z6bJgJDaEF9FOPDdNKMev1hVrFh2XTHq9v75GwpYxnjVsH0GrW0UqhtZ52pWg16/FhjVpANu2Ngb88m/Zo1IL4MICg5FthQcmPKomGVSsFpJQopSYupaRaKUTCIr9TuZhnq76O47iTWBhqysX832EA1ze3COf78LnFDBzvRebP3BrbG2tfUx23eXKwOyvd/tH/a4nus083fKdxIODDXwAAAABJRU5ErkJggg==" />