无法获得图像格式 - 产生EACCES错误

时间:2015-01-08 10:13:25

标签: node.js node-gm

我正在使用ImageMagicK为nodeJS(gm)编写NodeJs 0.10应用程序

我使用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

我正在从用户ufk运行nodeJS。

当我尝试使用以下代码获取格式时:

       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。 现在它的作品!但如果安装ImageMagick或GraphicsMagicK以便显示正确的错误消息,我如何从nodeJS检查。

1 个答案:

答案 0 :(得分:1)

您可以使用'哪个' shell命令检查' 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/