Потоковая передача файла, загруженного с помощью Express.js, через грозный и gm, чтобы исключить двойную запись

Я хочу загрузить и изменить размер изображения за один раз, не записывая его на диск дважды.

Для загрузки изображения я использую: node-formidable: https://github.com/felixge/node-formidable

Чтобы изменить размер изображения, я использую: gm: http://aheckmann.github.com/gm/

Когда я запускаю этот код, я получаю сообщение об ошибке: «Этот сокет закрыт».

Ошибка: создание ENOENT в errnoException (child_process.js:988:11) в Process.ChildProcess._handle.onexit (child_process.js:779:34)

Мой код:

function uploadPhotos (req, res) {
  // parse a file upload
  var form = new formidable.IncomingForm();
  form.multiples = true;      // Allow multiple files with HTML5 multiple attribute.
  form.maxFields = 100;       // Maximum number of fields (no files).
  form.keepExtensions = true; // Include the extensions of the original files.
  form.uploadDir = ORIGINAL_IMAGES_DIR;

  form.onPart = function (part) {

    if (!part.filename) {
      // Let formidable handle all non-file parts.
      return this.handlePart(part);
    }

    gm(part)
    .resize(200, 200)
    .stream(function (err, stdout, stderr) {
      stdout.pipe(fs.createWriteStream(path.join(RESIZED_IMAGES_DIR, 'resized_' + part.filename)));
      stdout.on('end', function () {
        res.send(200);
      });
    });
  };

  form.parse(req);
}

Я не могу понять, в чем проблема. Аналогичную проблему можно найти здесь: Потоковая передача файла, загруженного с помощью Express.js, через gm для устранения двойной записи

Какие-либо предложения?

Спасибо!


person Stofkn    schedule 20.04.2014    source источник


Ответы (1)


Я думал, что npm install поможет, но он не установил GraphicsMagick. Установка GraphicsMagick вручную решила мою проблему.

Благодаря tuck: gm stream stdout pipe выдает необработанную ошибку

person Stofkn    schedule 21.04.2014