Nodejs 스트림을 사용하여 S3에서 파일을 다운로드하고 쓰기 가능한 스트림으로 로컬 폴더로 직접 파이프합니다. 로컬 파일이 저장되면 로컬 파일을 여러 버전으로 다시 크기 조정하고 S3에 다시 업로드하기 위해 몇 가지 추가 처리를 수행합니다.오류 : 임의로 나타나는 ENONT 생성 (스트림 관련)
아래 코드는 S3에서 파일을 제대로 다운로드하고 로컬 폴더에 저장합니다. 나는 이것이 효과가 있음을 확인했다.
var readable = request(path)
, writable = fs.createWriteStream('files/images/' + fileName);
var localPath = 'files/images/' + fileName;
winston.log('info', "About to start download: " + asset.fileType);
readable.pipe(writable)
//once the file is saved, start processing it
.on('error', function(error){
winston.log('error', error);
})
.on('finish', function() {
winston.log('info', "file downloaded");
series(localPath, sizesKey.shift(), respond);
readable.end();
writable.end();
}).on('error', function(error){
winston.log('error', error);
});
내 로컬 컴퓨터에서 스크립트를 실행하면 모든 것이 제대로 작동하고 나머지 스크립트는 문제없이 계속됩니다.
그러나 노드 v.10.10이있는 Amazon EC2 LINUX에서 실행하면 위의 코드가 실행 된 후에 아래 오류가 발생하지만 항상 동시에 실행되는 것은 아닙니다. 예를 들어 크기 조정 중에, 크기 조정이 성공적으로 완료된 후에 또는 위의 코드를 완료 한 후에 발생하는 S3 업로드 중에 오류가 표시 될 수 있습니다.
내 생각 엔 스트림을 제대로 닫지 않고 말하는 것이 내게 문을 닫는 것 같습니다. 그럼에도 불구하고 나는 지금 어둠 속에서 총을 쏜다. 오류가 어디에서 오는의 더 나은 아이디어를 얻을 수 있도록 별개의 객체로 스트림을 위반하여
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)