将二进制转换为 base64 时缓冲区溢出
buffer overflow when converting binary to base64
当我尝试从 mongoDB 中提取图像数据并尝试将其转换为 base64 时,我 运行 陷入缓冲区溢出。我知道在 mongo 中存储图像不是最优的,但我想这样做,只是为了这样做。
这是我收到的错误:
'start-server' errored after 6.28 s
[22:21:05] Error: stdout maxBuffer exceeded
at Socket.<anonymous> (child_process.js:255:14)
at emitOne (events.js:90:13)
at Socket.emit (events.js:182:7)
at readableAddChunk (_stream_readable.js:153:18)
at Socket.Readable.push (_stream_readable.js:111:10)
at Pipe.onread (net.js:529:20)
这是调用和转换数据的路由:
app.get('/api/photos', function (req, res) {
var photos = Photo.find({}, function(err, photos) {
if(photos.length != 0){
var photosData = [];
for(var i = 0; i < photos.length; i++){
var thumb = new Buffer(photos[i].img.data).toString('base64');
photosData.push(thumb);
}
res.json({info: 'it worked',
photos: photosData
});
}else{
res.json({info: 'it worked',
photos: false
});
}
});
})
请参阅有关 maxBuffers 的问题:Reading binary data from a child process in Node.js
这实际上来自我的 gulp 文件,因为我有一个 exec 任务正在启动我的服务器。必须将 maxBuffer 添加到该子进程,如下所示。
gulp.task('start-server', ['build', 'watch'], function (cb) {
if(!started){
exec('node dist/server.js', {maxBuffer: 5000*1024}, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
started = true;
});
}
});
当我尝试从 mongoDB 中提取图像数据并尝试将其转换为 base64 时,我 运行 陷入缓冲区溢出。我知道在 mongo 中存储图像不是最优的,但我想这样做,只是为了这样做。
这是我收到的错误:
'start-server' errored after 6.28 s
[22:21:05] Error: stdout maxBuffer exceeded
at Socket.<anonymous> (child_process.js:255:14)
at emitOne (events.js:90:13)
at Socket.emit (events.js:182:7)
at readableAddChunk (_stream_readable.js:153:18)
at Socket.Readable.push (_stream_readable.js:111:10)
at Pipe.onread (net.js:529:20)
这是调用和转换数据的路由:
app.get('/api/photos', function (req, res) {
var photos = Photo.find({}, function(err, photos) {
if(photos.length != 0){
var photosData = [];
for(var i = 0; i < photos.length; i++){
var thumb = new Buffer(photos[i].img.data).toString('base64');
photosData.push(thumb);
}
res.json({info: 'it worked',
photos: photosData
});
}else{
res.json({info: 'it worked',
photos: false
});
}
});
})
请参阅有关 maxBuffers 的问题:Reading binary data from a child process in Node.js
这实际上来自我的 gulp 文件,因为我有一个 exec 任务正在启动我的服务器。必须将 maxBuffer 添加到该子进程,如下所示。
gulp.task('start-server', ['build', 'watch'], function (cb) {
if(!started){
exec('node dist/server.js', {maxBuffer: 5000*1024}, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
started = true;
});
}
});