Node.js/Mongodb/GridFS 在上传时调整图像大小
Node.js/Mongodb/GridFS resize images on upload
我正在使用流将上传的图像保存在 Mongodb GridFS with Node.js/Express/gridfs-stream/multyparty 中。
工作正常。
现在我想 "normalize" 在存储到数据库之前将图像(调整大小)为某种标准格式。
- 我可以使用 gm https://github.com/aheckmann/gm 并进行流式传输,但我必须安装本机 ImageMagic(不是一个选项)或
- 使用 lwip https://github.com/EyalAr/lwip 并进行 "pure Node" 设置,但我无法进行流式传输
那么有没有一种解决方案可以在不安装外部库的情况下实现请求-> 调整大小-> 存储到 GridFS 的流式解决方案?
当前解决方案(缺少调整大小步骤):
function storeImage(req, err, succ){
var conn = mongoose.connection;
var gfs = Grid(conn.db);
var context = {};
var form = new multiparty.Form();
form.on('field', function(name, value){
context[name] = value;
console.log(context);
});
form.on('part', function(part){
// handle events only if file part
if (!part.filename) { return; }
var options =
{
filename: part.filename,
metadata: context,
mode: 'w',
root: 'images'
};
var ws = gfs.createWriteStream(options);
// success GridFS
ws.on('close', function (file) {
console.log(file.filename + file._id);
succ(file._id);
});
// error GridFS
ws.on('error', function (errMsg) {
console.log('An error occurred!', errMsg);
err(errMsg);
});
part.pipe(ws);
});
// Close emitted after form parsed
form.on('close', function() {
console.log('Upload completed!');
});
form.parse(req);
}
为了子孙后代
1) 最初我在本地存储图像时使用 lwip。当人们开始上传更大的图像(这是作为要求添加的)时,lwip 开始在 Heroku 上爆炸我的实例,我切换到
2) 在默认实例中预配置了 ImageMagick 的 AWS Lambda 上通过 ImageMagick 运行 进行 gm。图像现在存储在 S3 上并通过 CloudFront 分发。
我正在使用流将上传的图像保存在 Mongodb GridFS with Node.js/Express/gridfs-stream/multyparty 中。 工作正常。
现在我想 "normalize" 在存储到数据库之前将图像(调整大小)为某种标准格式。
- 我可以使用 gm https://github.com/aheckmann/gm 并进行流式传输,但我必须安装本机 ImageMagic(不是一个选项)或
- 使用 lwip https://github.com/EyalAr/lwip 并进行 "pure Node" 设置,但我无法进行流式传输
那么有没有一种解决方案可以在不安装外部库的情况下实现请求-> 调整大小-> 存储到 GridFS 的流式解决方案?
当前解决方案(缺少调整大小步骤):
function storeImage(req, err, succ){
var conn = mongoose.connection;
var gfs = Grid(conn.db);
var context = {};
var form = new multiparty.Form();
form.on('field', function(name, value){
context[name] = value;
console.log(context);
});
form.on('part', function(part){
// handle events only if file part
if (!part.filename) { return; }
var options =
{
filename: part.filename,
metadata: context,
mode: 'w',
root: 'images'
};
var ws = gfs.createWriteStream(options);
// success GridFS
ws.on('close', function (file) {
console.log(file.filename + file._id);
succ(file._id);
});
// error GridFS
ws.on('error', function (errMsg) {
console.log('An error occurred!', errMsg);
err(errMsg);
});
part.pipe(ws);
});
// Close emitted after form parsed
form.on('close', function() {
console.log('Upload completed!');
});
form.parse(req);
}
为了子孙后代
1) 最初我在本地存储图像时使用 lwip。当人们开始上传更大的图像(这是作为要求添加的)时,lwip 开始在 Heroku 上爆炸我的实例,我切换到
2) 在默认实例中预配置了 ImageMagick 的 AWS Lambda 上通过 ImageMagick 运行 进行 gm。图像现在存储在 S3 上并通过 CloudFront 分发。