2014-11-29 2 views
0

버퍼 설명서의 http://nodejs.org/api/buffer.html#buffer_buffer에 콜백이 표시되지 않습니다. 버퍼가 동기식이라고 가정하는 것이 안전합니까? 이진 파일을 base64로 인코딩 된 문자열로 변환하려고합니다.은 nodejs 버퍼 비동기식 또는 동기식입니까?

나는 궁극적으로 PNG 파일을 가져 와서 base64로 인코딩 된 문자열을 MongoDB에 저장하려고합니다. 나는 PNG 파일을 가져와 Buffer를 사용하여 base64로 변환 한 다음이 base64 출력을 Mongo로 전달해야한다고 읽었습니다.

내 코드는 다음과 같이 보입니다 :

fs.readFile(filepath, function(err, data) { 
    var fileBuffer = new Buffer(data).toString('base64'); 
    // do Mongo save here with the fileBuffer ... 
}); 

내가 버퍼 동기 것을 조금 무서운이야을, 따라서이 base64로 인코딩이 일어나는 동안 다른 요청을 차단된다. 그렇다면 Mongo에 저장하기 위해 바이너리 파일을 base64로 변환하는 더 좋은 방법이 있습니까?

+0

음, 이것이 동기인지 아닌지는 모르지만 asynnchronous 콜백의 내부에서 'toString' 메소드를 호출하고 있습니다. 'fs.readFile'의 콜백 안에서 다른 것을 실행할 필요가 있습니까? 그것의 바깥 부분은 그것으로 막혀서는 안됩니다. –

답변

0

동기식입니다. Buffer를 슬라이싱하고 한 번에 작은 양을 변환하고 그 사이에 process.nextTick()을 호출하거나 자식 프로세스에서 실행하여 비동기로 만들 수 있습니다. 그러나 이러한 접근 방법 중 하나는 권장하지 않습니다.

대신 db에 이미지를 저장하지 말고 디스크에 저장하거나 Amazon S3와 같은 파일 저장 서비스에 저장 한 다음 파일 경로 또는 URL 만 데이터베이스에 저장하는 것이 좋습니다.

+0

'buffer.slice (start, end)'는 버퍼 슬라이싱을 도와줍니다. –