2017-09-25 30 views
0

.txt 파일에 기록해야하는 문자열 배열이 있습니다. 또한 JSZip을 사용하여 결과 .txt 파일을 .zip 형식으로 압축해야합니다. 클라이언트 측에서이 문자열 배열을 사용하여 'text/plain'Blob을 생성 한 다음이 Blob을 JSZip을 사용하여 .zip 형식으로 압축했습니다. node.js를 사용하여 서버 측에서도 동일한 작업을 수행해야하지만 Blob을 node.js에서 사용할 수 없다는 것을 깨달았습니다. 나는 Blob 대신에 'Buffer'를 사용해 보았고 .zip으로 압축 된 이진 파일을 얻었다. 나는 node.js의 초보자이며 Buffer의 개념을 이해할 수 없었다. node.js에 Blob을 만들 수 있습니까? 또는 node.js Buffer와 동일한 작업을 수행 할 수 있습니까? 나는이 같은 물방울 내용에서 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 is not defined'오류가 발생했습니다. – 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 :)