2017-04-01 2 views
0

node-zip (사용중인 JSZip 사용)을 사용하고 있습니다. zip 파일의 내용을 수정해야하며 큰 압축 파일의 경우 시간이 오래 걸릴 수 있으므로 전체 zip을 다시 생성하지 않고 수정할 수 있어야합니다. 다음은 예입니다 :nodejs - 전체 아카이브를 다시 생성하지 않고 zip 파일의 내용을 변경합니다.

var zip = new JSZip() 

// Add some files to the zip 
zip.file('file1', "file 1 contents\n") 
zip.file('file2', "file 2 contents\n") 
zip.file('file3', "file 3 contents\n") 

// Generate the zip file 
buffer = zip.generate() 

// Make some changes 
zip.file('file1', "changed file contents\n") 

// Now I have to generate the entire zip again to get the buffer 
buffer = zip.generate() 

어떻게 할 수있는 내가 업데이트 된 아카이브 버퍼를 얻을 수 있지만 난 단지 CPU 사이클이 JSZip V2를 가정하면 하나 개의 파일

답변

1

를 업데이트 지출해야

updatedBuffer = zip.updateFile(buffer, 'file1', 'changed file contents\n') 

같은 여기 (zip.generate()) :

asNodeBuffer()으로 버퍼를 가져 와서 수정하고 파일 내용을 업데이트 할 수 있습니다.

var buffer = zip.file("file1").asNodeBuffer(); 
// change buffer 
zip.file("file1", buffer); 

편집 : 당신이 장소에서 편집 의미 경우 디스크에 저장된 zip 파일이 : 아니, JSZip은 할 수 없습니다.

+0

그러나 file()에 대한 두 번째 호출은 변경 내용을 디스크에 직렬화합니까? 내 이해는 그들이하지 않을 것이며, 나는 여전히 generate()를 다시 호출해야 할 것이다. – ZECTBynmo

+0

'generate()'를 다시 호출해야하지만 JSZip은 압축 된 내용을 다른 파일에 다시 사용합니다 (동일한 압축, STORE 또는 DEFLATE 사용). –