 
			
				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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |