busboy "file" 到 gm 到 ftp 上传

busboy "file" to gm to ftp upload

我想在 nodejs 上重新调整上传图片的大小并通过 ftp 发送。 使用 nodejs、busboy、GraphicsMagick 和 jsftp.

var uploadFile = function(dir, req, cb) {
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {

  var imageMagick = gm.subClass({
    imageMagick: true
  });

  console.log('Resizing file...');
  console.log(filename);

  imageMagick(file)
    .resize(150, 150)
    .stream(function(err, stdout, stderr) {
      if (err)
        console.log(err);

      var i = [];

      stdout.on('data', function(data) {
        console.log('data');
        i.push(data);
      });

      stdout.on('close', function() {
        console.log('close');

        var image = Buffer.concat(i);

        console.log(image.length);
        console.log(image);

        ftp.put(image, filepath, function(hadError) {
          if (!hadError) {
            filename = config.one.filepath + dir + "/" + filename;
            cb(null, filename);
          } else {
            console.log(hadError);
            cb(hadError, 'Error');
          }
        });
      });
    });
});
req.pipe(req.busboy);
};

现在的输出是:

Resizing file...
100-0001_IMG.JPG
close
0
<Buffer >

在 ftp 服务器端,我得到一个 0 字节的文件,也从未执行过 cb。 我发现了这两个问题,但无法使它对我有用: Question 1 Question 2

我想我给 gm 的文件肯定有问题,因为 "data" 从未写入控制台。 自己归档很好,因为我设法将未调整大小的文件上传到 ftp 服务器。

感谢您的帮助!

感谢

首先您可以检查您的流是否有错误:

stdout.on('error', function(err) {
    console.log(err);
});

因此,如果存在与 imageMagick 相关的错误,则可能是 imageMagic 二进制文件与 node-imagemagick 库不匹配