2017-04-01 9 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つのファイル

答えて

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); 

編集:いいえ、JSZipはそれを行うことはできません。あなたは場所にディスク上に格納されたzipファイルを編集を意味します。

+0

しかし、file()の2回目の呼び出しで変更がディスクにシリアル化されますか?私の理解は、彼らはしないだろう、私はまだgenerate()をもう一度呼び出す必要があります。 – ZECTBynmo

+0

'generate()'をもう一度呼び出す必要がありますが、JSZipは圧縮されたコンテンツを他のファイルに再利用します(同じ圧縮、つまりSTOREまたはDEFLATEを使用していると仮定します)。 –

関連する問題