首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚持将二进制数据更改为base64 (Gridfs-stream)

坚持将二进制数据更改为base64 (Gridfs-stream)
EN

Stack Overflow用户
提问于 2016-01-28 04:44:19
回答 2查看 2.5K关注 0票数 1

我正在尝试将一些二进制数据从上传的图像更改为base64,这样我就可以使用它来显示图像。但泰莫司给了我这个错误:

代码语言:javascript
复制
TypeError: Cannot read property 'on' of undefined

我不明白,当我发帖的时候,我也使用了.on事件,它运行得很好。此外,我想知道我是否正确地改变了数据。

请考虑到我对节点相当陌生:)

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

代码语言:javascript
复制
// 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 )

代码语言:javascript
复制
// 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 + '">'
			})
		})
	})
});

我查过的资源:

EN

回答 2

Stack Overflow用户

发布于 2016-07-12 10:03:28

我还在寻找从gridfs读取映像的解决方案,并且我使用的是grid-fs strem。

这是我找到的解决办法,希望对你有帮助。

//设置gridfs

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
});

//将图像读给蒙戈

代码语言:javascript
复制
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);
});
票数 2
EN

Stack Overflow用户

发布于 2017-07-27 20:07:23

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35053034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档