2017-09-07 6 views
0

바이트 배열에서 작성 우편 번호 현재 내 webapi에서 base64 문자열로 파일을 가져 오는 중입니다. pdf-viewer을 사용하여보기 위해 문자열을 바이트 []로 변환합니다. 나는 또한 사용자가 file-saver을 사용하여 pdf를 저장/인쇄 할 수 있도록합니다.각도 2 - 나는 내가 각도 2.</p> <p>에 우편 디렉토리로 (base64로 문자열로 클라이언트 측에서 현재) 여러 개의 파일을 저장 대해 이동하는 방법에 대한 몇 가지 방향을 찾고

이제 사용자가 선택한 모든 파일을 zip 폴더로 다운로드 할 수있게하려고합니다. 불행하게도, 나는 얼룩 등을 완전히 이해하지 못하므로, 어떻게 접근해야하는지에 대한 도움이 필요하다. webapi에서 반환되는 객체에는 각 파일의 base64 문자열이 들어 있지만 byte [] 및 blob로 쉽게 변환 될 수 있습니다.

답변

0

이 위치에있을 수있는 사람들을 위해 필자가 내놓은 해결책은 기존 코드를 활용했지만 JSZip 만 추가하면됩니다. 이를위한 코드 :

public downloadAllFiles() { 
    console.log("Downloading All Files"); 
    var fileName = this.defaultDataService.defaultDataBase + "-" + this.selectedYear.path + ".zip"; 
    var zip = new JSZip(); 

    var year = zip.folder(this.selectedYear.path); 

    for (var i = 0; i < this.selectedTypes.length; i++) {    
     var subDir = year.folder(this.selectedTypes[i].path); 
     for (var j = 0; j < this.selectedTypes[i].pdfList.length; j++) { 
      subDir.file(this.selectedTypes[i].pdfList[j].name + ".pdf", this.createPdfBlob(this.convertBase64ToBytes(this.selectedTypes[i].pdfList[j].bytes))); 
     } 
    } 

    zip.generateAsync({ type: "blob" }) 
     .then(function (blob) { 
      FileSaver.saveAs(blob, fileName); 
     }); 
} 

convertBase64ToBytes(data: string) { 
    let byteCharacters = atob(data); 
    let byteNumbers = new Array(byteCharacters.length); 

    for (var i = 0; i < byteCharacters.length; i++) { 
     byteNumbers[i] = byteCharacters.charCodeAt(i); 
    } 

    let byteArray = new Uint8Array(byteNumbers); 
    return byteArray; 
} 

createPdfBlob(src: any) { 
    const byteArrays = []; 
    byteArrays.push(src); 
    return new Blob(byteArrays, { type: 'application/pdf' }); 
}