【问题标题】:Node.js/Mongodb/GridFS resize images on uploadNode.js/Mongodb/GridFS 在上传时调整图像大小
【发布时间】:2015-04-02 11:56:23
【问题描述】:

我正在使用流的 Node.js/Express/gridfs-stream/multyparty 将上传的图像保存在 Mongodb GridFS 中。 工作正常。

现在我想在存储到数据库之前将图像“标准化”(调整大小)为某种标准格式。

那么有没有一种解决方案可以在不安装外部库的情况下使用流式解决方案来请求 -> 调整大小 -> 存储到 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);

}

【问题讨论】:

    标签: javascript node.js image mongodb gridfs-stream


    【解决方案1】:

    为了后代

    1) 最初我在本地存储图像时使用了 lwip。当人们开始上传更大的图像(这是作为要求添加的)时,lwip 开始在 Heroku 上爆炸我的实例,我切换到

    2) gm over ImageMagick 在默认实例中预配置 ImageMagick 的 AWS Lambda 上运行。图像现在存储在 S3 上并通过 CloudFront 分发。

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多