陷入二进制数据更改为base64(Gridfsstream)

我试图从我上传的图像更改一些二进制数据到base64,所以我可以使用它来显示图像。 但最小的是给我这个错误:

TypeError: Cannot read property 'on' of undefined 

我不明白,当我发布我也使用.on事件,它工作正常。 除此之外,我想知道我是否正确地更改了数据。

请考虑到我是相当新的节点:)

我如何保存上传的图像(POST)

 // Post to profile page router.post('/', function(req, res, next) { var busboy = new Busboy({ headers: req.headers }); busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { var conn = mongoose.createConnection('192.168.99.100:32773'); conn.once('open', function () { var gfs = Grid(conn.db); var writestream = gfs.createWriteStream({ filename: filename, content_type: mimetype, mode: 'w', metadata: { belongs_to: req.session.passport.user } }); file.pipe(writestream); writestream.on('close', function(file){ res.render('profile', { user: req.user, message: req.flash('uploadMessage', 'Your image has been uploaded successfully!') }) }) }) }) req.pipe(busboy); }); 

在这里,我尝试获取图像,并将二进制数据转换为base64(GET)

 // GET to index router.get('/', function(req, res){ var conn = mongoose.createConnection('192.168.99.100:32773'); conn.once('open', function () { var gfs = Grid(conn.db); var readstream = gfs.createReadStream({ filename: 'kittendj.jpg' }); readstream.pipe(); readstream.on('open', function(chunk){ bufs.push(chunk); }) readstream.on('close', function(){ var bufs = []; var fbuf = Buffer.concat(bufs); var base64 = (fbuf.toString('base64')); res.render('index', { isAuthenticated: req.isAuthenticated(), user: req.user, imageSrc: '<img src="data:image/jpeg;base64,' + base64 + '">' }) }) }) }); 

我检查的资源:

  • gridfs-stream文档

  • 从GridFS以HTML格式显示图像

  • 在GridFS中显示图像
  • 如何在单个http请求中检索gridF中的所有图像
  • Node.js显示来自Mongo GridFS的图像
  • nodejs将存储在gridFS中的图像显示为html

我也在寻找解决scheme来读取网格的图像,我正在使用grid-fs strem

这是我find的解决scheme,希望对你有所帮助。

//设置网格

 import mongoose from 'mongoose'; import Grid from 'gridfs-stream'; const db = mongoose.connection.db; const mongoDriver = mongoose.mongo; const gfs = new Grid(db, mongoDriver); 

//将图片写入mongo

 const writeStream = gfs.createWriteStream({ filename: 'test.png', content_type: 'image/png', }); fs.createReadStream(filePath).pipe(writeStream); writeStream.on('close', (gfsFile) => { // remove the original file fs.unlink('test.png'); // this is the information, and _id is the id console.log(gfsFile); }); 

//读取图像给mongo

 const readstream = gfs.createReadStream({ _id: id, }); const bufs = []; readstream.on('data', function (chunk) { bufs.push(chunk); }); readstream.on('end', function () { const fbuf = Buffer.concat(bufs); const base64 = fbuf.toString('base64'); console.log(base64); }); 

请检查我创build的这个Github回购上传图片并返回结果为base64。 https://github.com/houssem-yahiaoui/fileupload-nodejs