2014-05-16 2 views
0

읽기 스트림에서 읽을 수있는 nodejs의 라이브러리를 사용하고 있습니다. 나는 현재 스트림을 읽고 스트림을 lib에 전달하고있다. 그러나 나는 또한 내가 읽고있는 파일 시스템에 파일을 만들어야한다. 그래서 1 단계는 파일 스트림을 작성하고 데이터를 파일로 스트리밍하는 것입니다.스트림을 읽기 스트림에 쓰기

  1. 데이터 쓰기 스트림 -----> 파일
  2. HTTP 응답 < ------ 읽을 스트림 파일

나는이 과정에 대해 좋아하지 않는 것은입니다 I 완료되면 파일 시스템을 정리해야합니다. 읽기 스트림에 직접 쓰고 한 번에 모두 할 수있는 방법이 있습니까?

편집 : (https://github.com/ctalkington/node-archiver 사용) 콘크리트 예 :

// some route 
function(req, res, next) { 
    var archive = archiver('zip'); 
    res.attachment("icons.zip"); 
    archive.pipe(res); 

    // I have to create files on file system 
    var stream1 = fs.createWriteStream("file1.txt"); 
    var stream2 = fs.createWriteStream("file2.txt"); 
    ... 
    // all stuff is one streaming to file system 

    // now stream stuff from file system to archive 
    archive 
     .append(fs.createReadStream("file1.txt"), { name: 'file1.txt' }) 
     .append(fs.createReadStream("file2.txt"), { name: 'file2.txt' }) 
     .finalize(); 

} 

내가 먼저 시스템 파일을 스트리밍을 방지하는 방법을 모른다.

편집 :

내가 읽을 수있는 스트림에 쓸 수 :

간단한 질문은 정말입니까?

+1

왜 라이브러리를 http 응답으로 파이프 할 수 없습니까? –

+0

편집을 참조하십시오. – lostintranslation

+0

파일이 아니라면'archive'는 무엇을 보관해야할까요? –

답변

2

는 쉽게 대답처럼 보인다을, 나는이 놓친 믿을 수 없다.

http://nodejs.org/api/stream.html#stream_class_stream_passthrough

클래스 : 난 그냥 통과를 사용할 수 있습니다처럼

이 보이는 stream.PassThrough #이는 의 사소한 구현은 단순히 입력을 전달 스트림을 변환입니다 출력에 걸쳐 바이트 . 그 목적은 주로 예제와 테스트를위한 것이지만, 때로는 이 있습니다. 새로운 유형의 스트림을위한 빌딩 블록 으로 유용 할 수 있습니다.

0

읽을 수있는 스트림을 응답 또는 쓰기 가능한 스트림으로 파이프합니다. 당신은 같은 것을 할 수있는 클라이언트로 파이프에

:

// the response object is a writable stream too. 

// Send the headres first (Dont forget these, and change the content type.) 

res.writeHead(200, { 
    'Content-Type': 'application/pdf', 
    'Access-Control-Allow-Origin': '*' 
}); 
var resStream = readableStm.pipe(res); // readableStm should be a READABLE stream 

// listen to the finish ev. 
resStream.on('finish', function() { 
    res.end(); 
}); 
+0

그건 내 마지막 단계의 일부이지만 파일 시스템에 파일을 먼저 스트리밍하는 첫 번째 단계를 제거하는 방법을 설명하지 않습니다. 아마도이 문제를 혼란스럽게하여 처음에 추가해야하는 구체적인 예를 추가했습니다.) – lostintranslation

관련 문제