陷入二进制数据更改为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 。
- 使用Gridfsstream将videostream从mongoDBstream式传输到ios应用程序
- 使用Node.js,Express.js和gridfs-stream直接将文件stream式传输到GridFS
- 如何使用nodeJS下载在gridFS中保存的文件
- 使用Node.js将Base64图像转换为原始二进制文件
- 在MongoDB / NodeJs / GridFS堆栈中从GridFS下载文件的问题
- 节点REST API图像呈现问题
- 为什么gridfs只能通过文件名来处理文件id(ObjectId)
- Nodejs – HTTP范围支持/部分文件下载
- 如何使用multer-gridfs-storage,express,mongodb在用户configuration文件中添加图像path