0

我想在 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。我找到了这两个问题,但无法让它对我有用: 问题 1 问题 2

我想我给 gm 的文件一定有问题,因为“数据”从未写入控制台。File it self 很好,因为我设法将未调整大小的文件上传到 ftp 服务器。

我感谢每一个帮助!

谢谢

4

1 回答 1

1

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

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

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

于 2015-11-23T17:45:47.457 回答