Невозможно получить формат изображения - ошибка EACCES spawn

Я пишу приложение NodeJs 0.10, используя ImageMagicK для nodeJS (гм)

Я использую Restify для создания API.

Я пытаюсь выяснить, является ли загруженный файл изображением, проверив его формат.

я выбираю путь загруженного изображения, используя request.files.drink_image.path что приводит к /tmp/upload_72052b3fede5faccfe4cf20b59b341f2

результат ls -lsa в этом файле:

-rw-r--r-- 1 ufk users 8255 Jan  8 12:02 /tmp/upload_8ee3f234f8c04c67430f28f1336e9ba6

результат файла в этом файле:

/tmp/upload_8ee3f234f8c04c67430f28f1336e9ba6: PNG image data, 250 x 100, 8-bit/color RGB, non-interlaced

я использую nodeJS от пользователя ufk.

когда я пытаюсь получить формат, используя следующий код:

       gm(tempFilePath).format(function(err, value){
        console.log(inspect(err));
        console.log(value);
       });

Я получаю следующую ошибку:

{ [Error: spawn EACCES] code: 'EACCES', errno: 'EACCES', syscall: 'spawn' }

я понятия не имею, почему я получаю ошибку доступа, так как он был создан пользователем UFK, и он установлен в rw,

есть идеи?

Обновить

хорошо, я не установил ImageMagick или GraphicsMagick. теперь это работает! но как я могу проверить с nodeJS, установлены ли ImageMagick или GraphicsMagicK, чтобы показать правильное сообщение об ошибке.

1 ответ

Решение

Вы можете использовать команду "which" для проверки исполняемого файла "gm". попробуйте https://github.com/arturadib/shelljs:

if (!which('gm')) {
  // gm is not installed
  // return error message
}

Вы можете пойти немного дальше и убедиться, что это правильный исполняемый файл:

var e = exec('gm -version');
if (e.code !== 0) {
  // error
}
// parse e.output to make sure the right version is installed 
// e.g. GraphicsMagick 1.3.18 2013-03-10 Q16 http://www.GraphicsMagick.org/
Другие вопросы по тегам