Angular 从后端获取zip文件

Angular 从后端获取zip文件,angular,nestjs,jszip,nodejs-jszip,Angular,Nestjs,Jszip,Nodejs Jszip,我试图在后端生成文件,然后返回一个包含所有这些文件的zip文件 后端函数如下所示: 从“文件保护程序”导入{saveAs}; @获取('encrypt/all') 异步encryptAllRecipes(){ const-zip:JSZip=new-JSZip(); const allRecipes:RecipeEntity[]=等待此消息。listAllRecipes(); for(所有配方的常量配方){ const encryptedRecipeStr:string=等待此。encryptR

我试图在后端生成文件,然后返回一个包含所有这些文件的zip文件

后端函数如下所示:

从“文件保护程序”导入{saveAs};
@获取('encrypt/all')
异步encryptAllRecipes(){
const-zip:JSZip=new-JSZip();
const allRecipes:RecipeEntity[]=等待此消息。listAllRecipes();
for(所有配方的常量配方){
const encryptedRecipeStr:string=等待此。encryptRecipe(配方);
zip.file(`${recipe.name}.enc`,encryptedRecipeStr);
}
const buffer:buffer=await(zip.generateAsync({type:“nodebuffer”}),函数updateCallback(元数据){
log(“进程:+元数据.percent.toFixed(2)+”%”;
}));
返回缓冲区;
}
这个函数的答案看起来是这样的(我在里面用“…”截断了它,因为它太大了)

{“type”:“Buffer”,“data”:[80,75,3,4,…,0,0,19,0109,4,0,0121,17,0,0,0,0,0]}
然后,在前端,我想下载zip文件:

exportAllToEncryptedFile(){
const headers=新的HttpHeaders();
常量参数:HttpParams=新的HttpParams();
返回此。\u httpRequestsManager
.get(`${this.\u constants.encryptAllRecipesAddress}`,{headers,params,responseType:'arraybuffer'})
.订阅((响应:任意)=>{
const blob=new blob([response],{type:'arraybuffer'});
saveAs(blob,`encryptedRecipes.zip`);
},
(错误:HttpErrorResponse)=>{
控制台日志(err);
}
);
}
该文件不能作为zip读取,它包含后端返回的json。我尝试过很多东西,其中:

  • 从后端使用base64编码返回缓冲区,并从前端解码此字符串
  • 将“responseType”与“blob”和“arraybuffer”一起使用
  • 在文件中存储response.data字段,而不是整个响应
  • 将标题的内容类型定义为“application/zip”、“text/plain”和“multipart/form data”
我对http查询不是很有经验。我该怎么办

多谢各位

编辑:从后端,如果我直接将缓冲区写入文件,则生成的文件是正确的

fs.writeFile('C:\\ziptests\\testBlob.zip',buffer,()=>{
log(“文件写入”);
});

我认为下载zip文件的一个更简单的解决方案是在后端创建文件,并将路径(作为链接)发送到前端,然后在链接中添加href,以便浏览器启动下载