2017-09-07 128 views
0

我在找上如何去在角2角2 - 從字節數組

我(在客戶端目前爲Base64字符串)保存多個文件以zip目錄中的一些方向創建郵編目前從我的webapi獲取文件作爲base64字符串。我使用pdf-viewer將字符串轉換爲字節[]以供查看。我還允許用戶使用file-saver保存/打印PDF。

現在,我想允許用戶將所有選定的文件下載到zip文件夾中。不幸的是,我不完全理解blob等,因此,如何解決這個問題需要一些幫助。請記住,從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' }); 
}