gpt4 book ai didi

rest - 使用 Angular 下载 zip 文件

转载 作者:太空狗 更新时间:2023-10-29 18:08:21 24 4
gpt4 key购买 nike

现在已经有好几个小时了,因为我正在尝试弄清楚如何使用 Angular 下载 zip 文件。下载的文件比原始文件小。我点击了这个链接 How do I download a file with Angular2 .

我不是简单地使用 <a>用于身份验证原因的下载标记。

服务

 downloadfile(filePath: string){
return this.http
.get( URL_API_REST + 'downloadMaj?filePath='+ filePath)
.map(res => new Blob([res], {type: 'application/zip'}))
}

组件

downloadfileComponent(filePath: string){
this.appService.downloadfile(filePath)
.subscribe(data => this.getZipFile(data)),
error => console.log("Error downloading the file."),
() => console.log('Completed file download.');
}


getZipFile(data: any){
var a: any = document.createElement("a");
document.body.appendChild(a);

a.style = "display: none";
var blob = new Blob([data], { type: 'application/zip' });

var url= window.URL.createObjectURL(blob);

a.href = url;
a.download = "test.zip";
a.click();
window.URL.revokeObjectURL(url);

}

休息API

public void downloadMaj(@RequestParam(value = "filePath") String filePath, HttpServletResponse response) {

System.out.println("downloadMaj");
File fichierZip = new File(filePath);

try {
System.out.println("nom du fichier:" + fichierZip.getName());
InputStream inputStream = new FileInputStream(fichierZip);

response.addHeader("Content-Disposition", "attachment; filename="+fichierZip.getName());
response.setHeader("Content-Type", "application/octet-stream");

org.apache.commons.io.IOUtils.copy(inputStream, response.getOutputStream());
response.getOutputStream().flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

谁能说出为什么没有下载所有文件?

已解决

downloadfile(filePath: string) {
return this.http
.get( URL_API_REST + 'download?filePath=' + filePath, {responseType: ResponseContentType.ArrayBuffer})
.map(res => res)
}
private getZipFile(data: any) {
const blob = new Blob([data['_body']], { type: 'application/zip' });

const a: any = document.createElement('a');
document.body.appendChild(a);

a.style = 'display: none';
const url = window.URL.createObjectURL(blob);
a.href = url;
a.download = test.zip;
a.click();
window.URL.revokeObjectURL(url);

}

最佳答案

  1. 在responseType中你需要分配一个字符串,在本例中是arraybuffer (Angular 5+)

downloadFile(filename: string) {
return this.http.get(URL_API_REST + 'download?filename=' + filename, {
responseType: 'arraybuffer'
});
}

  1. 我们可以使用下一个代码创建一个窗口来直接下载我们的文件:

this.myService.downloadFile(filename).subscribe(data => {
const blob = new Blob([data], {
type: 'application/zip'
});
const url = window.URL.createObjectURL(blob);
window.open(url);
});

关于rest - 使用 Angular 下载 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com