目前我使用 angular-file-upload 处理图像上传,我只是将图像保存到服务器的文件系统并在 HTML 中引用它.但是,我想尝试将图像直接存储在我为博客文章定义的架构内的数据库中.
Currently I handle image uploads using angular-file-upload and I simply save the image to the server's file system and reference it in the HTML. However, I want to try and store the image directly in the database within the Schema I defined for my blog posts.
var blogSchema = new Schema({ title: String, author: String, body: String, likes: { type: Number, default: 0 }, comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }], date: { type: Date, default: Date.now }, imageURL: String // instead of this image: // store it directly }); "imageURL: String" stores the path to the image.我想这样做,以便我可以拥有一个存储图像本身的字段.我在想我也许可以像我已经做的那样上传图像,但是在上传后转换图像并将其以二进制(或其他形式)存储在 Mongo 中.这可能吗?
I want to make it so that I can just have a field that stores the image itself. I was thinking that I could perhaps just upload the image like I already do, but instead convert the image after it has been uploaded and store it in binary (or some other form) in Mongo. Is this possible?
谢谢!
推荐答案下面这个例子展示了如何使用 mongoose 上传图片到 MongoDB.单击此链接获取原始来源
This example below shows how to upload an image to MongoDB using mongoose. Click this link for the original source
var express = require('express'); var fs = require('fs'); var mongoose = require('mongoose'); var Schema = mongoose.Schema; var imgPath = '/path/yourimage.png'; mongoose.connect('localhost', 'testing_storeImg'); var schema = new Schema({ img: { data: Buffer, contentType: String } }); var A = mongoose.model('A', schema); mongoose.connection.on('open', function () { console.error('mongo is open'); A.remove(function (err) { if (err) throw err; console.error('removed old docs'); // store an img in binary in mongo var a = new A; a.img.data = fs.readFileSync(imgPath); a.img.contentType = 'image/png'; a.save(function (err, a) { if (err) throw err; console.error('saved img to mongo'); // start a demo server var server = express.createServer(); server.get('/', function (req, res, next) { A.findById(a, function (err, doc) { if (err) return next(err); res.contentType(doc.img.contentType); res.send(doc.img.data); }); }); server.on('close', function () { console.error('dropping db'); mongoose.connection.db.dropDatabase(function () { console.error('closing db connection'); mongoose.connection.close(); }); }); server.listen(3333, function (err) { var address = server.address(); console.error('server listening on %s:%d', address.address, address.port); console.error('press CTRL+C to exit'); }); process.on('SIGINT', function () { server.close(); }); }); }); });更多推荐
使用 Node.js/Express 和 Mongoose 在 MongoDB 中存储图像
发布评论