20.09.2013, 08:44
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
помогите обойти ошибку ENOENT
привет всем,
при попытке чтения файла с помощью любой графической библиотеки происходит ошибка:
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:980:11)
at Process.ChildProcess._handle.onexit (child_process.js:771:34)
хотя файл доступен, и несколькими строчками выше он просто загружается в указанный путь "file_path" и выполняется get_file_info:
var gm = require('gm');
var im = require('imagemagick');
function get_file_info(file_path,fn){
console.log(dump.var_dump_node("file_path1",file_path));
fs.exists(file_path,function(exists){
console.log(dump.var_dump_node("file_path2["+exists+"]",file_path));
if(exists)//проверка раз
setTimeout(function(){
fs.exists(file_path,function(exists){
console.log(dump.var_dump_node("file_path3["+exists+"]",file_path));
if(exists) //проверка два (файл в это время нигде не запрашивается и не читается)
im.readMetadata(file_path,function (err, data){
console.log(dump.var_dump_node("data",data));
if(err) return fn(err);
fn(null,data);
});
});
},2000);
},2000);
/***
gm(file_path)
.identify(function (err, data){
console.log(dump.var_dump_node("data",data));
if(err) return fn(err);
fn(null,data);
});
***/
}
из проводника этот файл нормально открывается и в процессе выполнения скрипта и после..
подскажите пожалуйста что тут не так?
|
|
20.09.2013, 10:28
|
Интересующийся
|
|
Регистрация: 02.06.2013
Сообщений: 12
|
|
Не вдаваясь в подробности, проверки на существование файла не происходит...
Может как-то так попробовать?
function get_file_info(file_path, fn) {
if (isFile(file_path)) {
im.readMetadata(file_path, function(err, data) {
if (err) return fn(err);
fn(null, data);
});
}
}
function isFile(path) {
try {
return fs.statSync(path).isFile();
} catch(ignore) {}
return false;
}
Последний раз редактировалось unl0k, 20.09.2013 в 10:32.
|
|
20.09.2013, 11:14
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
function get_file_info(file_path,fn){
var b = isFile(file_path);
if(b) {
console.log(dump.var_dump_node("isFile",b));
im.readMetadata(file_path, function(err, data) {
console.log(dump.var_dump_node("readMetadata call success",1));
if (err) return fn(err);
fn(null, data);
});
console.log(dump.var_dump_node("readMetadata call end",1));
}
}
function isFile(path) {
try {
return fs.statSync(path).isFile();
} catch(ignore) {
console.log(dump.var_dump_node("ignore",ignore));
}
return false;
}
пока не помогает (
выдает тоже самое:
isFile = Boolean(true);
readMetadata call end = Number(1);
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:980:11)
at Process.ChildProcess._handle.onexit (child_process.js:771:34)
подскажите может ещё какие нить варианты, как поправить обойти?
|
|
20.09.2013, 11:17
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
ошибка именно в этом участке.., т.к. если с 5 по 9 строку заменить на это:
/**
im.readMetadata(file_path, function(err, data) {
console.log(dump.var_dump_node("readMetadata call success",1));
if (err) return fn(err);
fn(null, data);
});
**/
fn(null, {});
то все нормально работает..
|
|
20.09.2013, 12:19
|
Интересующийся
|
|
Регистрация: 02.06.2013
Сообщений: 12
|
|
Еще, может попробовать дать абсолютный путь file_path в readMetadata()?
Можно полный stack-trace?
Последний раз редактировалось unl0k, 20.09.2013 в 12:28.
|
|
20.09.2013, 12:29
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
файл в этой же функции нативными функциями читается нормально:
console.log(dump.var_dump_node("isFile",b));
fs.readFile(file_path, function (err, data) {
console.log(dump.var_dump_node("file data.length",data.length));
if (err) return fn(err);
fn(null, data.length);
});
isFile = Boolean(true);
readMetadata call end = Number(1);
file data.length = Number(21282);
видимо проблемы в библиотеках gm и imagemagick
буду искать ещё альтернативы
|
|
20.09.2013, 12:45
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
Еще, может попробовать дать абсолютный путь file_path в readMetadata()?
- я итак даю полный путь к файлу.
Можно полный stack-trace?
- а как его сделать? я выкладывал все что получал в консоли
|
|
20.09.2013, 12:49
|
Интересующийся
|
|
Регистрация: 02.06.2013
Сообщений: 12
|
|
Вы правы, и скорее всего косяк в библиотеке. Тесты падают...
|
|
20.09.2013, 15:55
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
тесты падают из-за того что все эти библиотеки запускают что то типа:
identify -format %[EXIF:*] "d:\you_file\hehe.jpg"
эта утилита идет в комплекте imagemagick (скачать можно тут http://www.imagemagick.org/script/binary-releases.php)
вообщем 1. скачиваем, 2. устанавливаем, 3. задаем пути к identify от ImageMagick и только тогда запускаем скрипт:
@SET PATH=%PATH%;c:\Program Files\ImageMagick-6.8.6-Q16
@node.exe script.js
а про необходимость наличия imagemagick библиотеки написано в реадми node.js модулях gm и imagemagick,
просто изначально перед установкой нужно внимательно читать readme и не лезть сразу в код если что то не работает (.
кстати не im.readMetadata и не gm.identify у меня так и не заработали(выдают пустые объекты), но зато отлично работает:
im.identify(['-format', '%wx%h', file_path], function(err, output){
if (err) throw err;
console.log(dump.var_dump_node("im_output",output));
});
проблема решена, всем спасибо, добра и удачи
Последний раз редактировалось povelitelb3000, 21.09.2013 в 09:59.
|
|
20.09.2013, 17:19
|
Новичок на форуме
|
|
Регистрация: 20.09.2013
Сообщений: 8
|
|
удалено
Последний раз редактировалось povelitelb3000, 21.09.2013 в 09:58.
|
|
|
|