Застрял в изменении двоичных данных в base64 (Gridfs-stream)
Я пытаюсь изменить некоторые двоичные данные из загруженных изображений в 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 + '">'
})
})
})
});
Ресурсы, которые я проверил:
2 ответа
Я также ищу решение для чтения изображения из gridfs, и я использую grid-fs strem
Это решение, которое я нашел, надеюсь, оно вам пригодится.
// настроить gridfs
import mongoose from 'mongoose';
import Grid from 'gridfs-stream';
const db = mongoose.connection.db;
const mongoDriver = mongoose.mongo;
const gfs = new Grid(db, mongoDriver);
// записать изображение в монго
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);
});
// читаем изображение в монго
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);
});
Пожалуйста, проверьте этот репозиторий Github, который я создал, чтобы загружать изображения и возвращать результат в виде base64. https://github.com/houssem-yahiaoui/fileupload-nodejs.