2017-09-25 142 views
0

私は、.txtファイルに書き込まれるべき文字列の配列を持っています。また、結果の.txtファイルをJSZipを使用して.zip形式に圧縮する必要があります。クライアント側では、この文字列を使用して 'text/plain' Blobを生成し、このBlobをJSZipを使用して.zip形式に圧縮しました。私はnode.jsを使って同じことをサーバー側で行う必要がありますが、node.jsではBlobが利用できないことに気付きました。私はBlobの代わりに 'Buffer'を使用しようとしました.zipとして圧縮されたバイナリファイルがあります。私はnode.jsの初心者であり、Bufferの概念を理解できませんでした。 node.jsにBlobを作成できますか?またはnode.jsバッファで同じ操作を実行できますか?私はこのようなブロブの内容からzipファイルを生成することができ、クライアント側ではJSZipを使用してnode.jsのバッファコンテンツを使用してzipファイルを生成する方法は?

//stringsArray is an array of strings 
var blob = new Blob(stringsArray, { type: "text/plain" }); 

var zip = new JSZip(); 
zip.file('file.txt' , blob); 

zip.generateAsync({ type: 'blob', compression: 'DEFLATE' }) 
.then(function(zipFile){ 

    //do something with zipFile 

}, function(error){ 

    console.log('Error in compression'); 

}); 

どのように私はNode.jsのを使用して同じことを行うことができますか?

+1

このコードはそのまま実行する必要があります。おそらくJSZipのドキュメントでノードのメソッドが異なるかどうかを確認してください。 –

+0

@BrahmaDev、node.jsに 'Blobが定義されていません'というエラーが表示される – HariV

+1

申し訳ありませんが、Bufferを使用する必要があります。 ドキュメントは、これを調べるのに適しています。https://stuk.github.io/jszip/documentation/api_jszip/generate_async.html –

答えて

0

解決策が見つかりました。私のコードでは、文字列の配列をnode.jsバッファに変換するための適切なメソッドを使用していませんでした(バッファが正しくないためJSZipを使用してバッファを圧縮できませんでした)。 適切な方法は、我々が最初にバッファリングし、すべてのこれらのサブバッファを追加することによって、新しいバッファを作成するために、各文字列を変換する必要があり、ということである

//stringsArray is an array of strings 
var buffer = Buffer.from(stringsArray); 

、私は次のコードを試してみましたが、それは私に間違ったバッファを与えました。私はそれに文字列を追加することによってnode.jsバッファを構築するカスタムバッファビルダを作成しました。私が試した新しい方法は次のとおりです。それは私のために働きました。

var CustomBufferBuilder = function() { 

    this.parts = []; 
    this.totalLength = 0; 

} 

CustomBufferBuilder.prototype.append = function(part) { 

    var tempBuffer = Buffer.from(part); 
    this.parts.push(tempBuffer); 
    this.totalLength += tempBuffer.length; 
    this.buffer = undefined; 

}; 

CustomBufferBuilder.prototype.getBuffer = function() { 

    if (!this.buffer) { 

     this.buffer = Buffer.concat(this.parts, this.totalLength); 

    } 
    return this.buffer; 

}; 


var customBufferBuilder = new CustomBufferBuilder(); 
var stringsArray = [ 'hello ', 'world.', '\nThis ', 'is', ' a ', 'test.' ];//stringsArray is an array of strings 
var len = stringsArray.length; 
for(var i = 0; i< len; i++){ 

    customBufferBuilder.append(stringsArray[ i ]); 

} 

var bufferContent = customBufferBuilder.getBuffer(); 

var zip = new JSZip(); 
zip.file('test.txt', bufferContent, { binary : true }); 
zip.generateAsync({ type : "nodebuffer", compression: 'DEFLATE' }) 
.then(function callback(buffer) { 

    fs.writeFile('test.zip', buffer, function(err){ 

     if(err){ 

      //tasks to perform in case of error 

     } 
     else{ 

      //other logic 

     } 

    }); 

}, function(e) { 

    //tasks to perform in case of error 

}); 

出力として、その中にzipファイル(test.zip)とtest.txtがあります。 zipファイル内のtest.txtファイルには、 'hello world'という単語が含まれています。\ nこれはテストです。 '

私の疑問を調べる時間を費やしてくれてありがとう@BrahmaDev :)

関連する問題