2014-03-05 2 views
0

내가 오류를 사용하여 파일을 업로드...이 지역에서 작동하지만 내 원격 서버에서 작동하지 않습니다, FS 및 NodeJS

내 오류 :

[sbaf.fr.3005-53 (out) 2014-03-05T20:19:59] { [Error: ENOENT, rename '/tmp/1e426309d298d9ab1d099e1017584058'] 
[sbaf.fr.3005-53 (out) 2014-03-05T20:19:59] errno: 34, 
[sbaf.fr.3005-53 (out) 2014-03-05T20:19:59] code: 'ENOENT', 
[sbaf.fr.3005-53 (out) 2014-03-05T20:19:59] path: '/tmp/1e426309d298d9ab1d099e1017584058' } 

내 컨트롤러 :

photoDAL.prototype.save = function(photo, file, callback) { 
    photo.file = file.name; 
    var photo = dbContext.photo.build(photo); 

    var file_tmp = file.path; 
    var file_name = file.name; 
    var file_type = file.type; 
    var file = './public/images/photo/'+file_name; 

    fs.rename(file_tmp, file, function(err){ 
     if(err) console.log(err); 
    }); 

    photo.save().success(function(photo) { 
     callback(photo); 
    }).error(function(error) { 
     callback({message: error}); 
    }); 
}; 

수정 # 1 :

화면 내 ExpressJS 응용 프로그램의 샷 ...

스크린 샷 1 : http://glui.me/?i=eweyq4ovennej50/2014-03-05_at_20.34_2x.png/ 스크린 샷 2 : http://glui.me/?i=1n2cjv57jd2fmwq/2014-03-05_at_20.33_2x.png/

편집 # 2 :

내 코드 :

console.log(process.cwd()); 
console.log(__dirname); 

콘솔 :

[sbaf.fr.3005-71 (out) 2014-03-05T21:55:48] /home/anthoc/apps 
[sbaf.fr.3005-71 (out) 2014-03-05T21:55:48] /home/anthoc/apps/sbaf.fr/app/dal 
+0

공개'./public/images/photo /'폴더가 존재합니까? – Vinz243

+0

예, 위의 편집 # 1 참조 ... – tonymx227

답변

0

따라서 : var file = './public/images/photo/'+file_name;process.cwd()을 기준으로 한 상대 경로입니다. 아마도 서버 프로세스가 앱 레고 루트를 사용하여 cwd로 시작 되었다면 모든 것이 잘되어야하지만 아마도 그렇지 않을 수 있습니다. cwd에 의존하지 말고 __dirname을 사용하고 현재 javascript 파일의 위치를 ​​기준으로 경로를 구성하는 것이 더 강력합니다. 그러니 한번 시도해보고 고칠 수 있는지 확인하십시오. 컨트롤러 모듈에 console.log(process.cwd())으로 디버깅 할 수 있습니다.

+0

위의 편집 # 2 참조 ... – tonymx227

0

__dirname을 사용해보세요. 다음과 같이 할 수 있습니다.

photoDAL.prototype.save = function(photo, file, callback) { 
photo.file = file.name; 
var photo = dbContext.photo.build(photo); 

var file_tmp = file.path; 
var file_name = file.name; 
var file_type = file.type; 
var file = __dirname + '/public/images/photo/'+file_name; 

fs.rename(file_tmp, file, function(err){ 
    if(err) console.log(err); 
}); 

photo.save().success(function(photo) { 
    callback(photo); 
}).error(function(error) { 
    callback({message: error}); 
}); 

}};

이제 있다면, 코드는 폴더에 당신의 목표는 나처럼, 부모에 있습니다

-root 
    - public 
    -photos 
    -server 
    -upload.js 

당신은 문자열 프로토에 기능을 추가 할 수 있습니다. 필요에 따라

String.prototype.getParent = function() { 
     // Be cross-platform 
    var replaced = this.replace(new RegExp("\\\\", "g"), '/'); 
    var index = replaced.lastIndexOf('/'); 
    return replaced.substring(0, index); 
}; 

이제 (__dirname.getParent().getParent()...를) __dirname.getParent() 많은 시간을 호출합니다.

+0

그래도 로컬 및 원격 서버에서 작동하는 솔루션이 있습니까? – tonymx227

+0

나는 정말로 이해하지 못한다. 이것은 heroku 또는 nodejitsu에서 작동합니다. – Vinz243