微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Angular 应用程序中通过 ASP.NET API 的 GET 方法下载 .zip

如何解决在 Angular 应用程序中通过 ASP.NET API 的 GET 方法下载 .zip

我需要从内存流下载我在 api 中创建的 .zip。 所有这些文件都来自亚马逊 S3 存储桶,并在我的 API 中进行了压缩。之后,我需要在我的 Angular Web 应用程序中下载这个 .zip。 该文件甚至被下载,但其进度不会出现在浏览器中,经过一段空闲时间后,.zip 直接进入下载页面。 我怎么解决这个问题?有没有办法通过浏览器显示其进度?或者甚至我为下载进度设置了一个界面?

下面是代码的一些打印。

API:

public async Task<bool> GetZipData(string data,string aliasMaquina,string bucketName,ZipArchive archive,SafeguardToken safeguardToken)
    {
        var client = await GetClient();
        var files = await GetListObjectsFilter(bucketName,aliasMaquina,string.Empty,data);

        foreach (var file in files)
        {
            GetobjectResponse response = await client.GetobjectAsync(bucketName,file.Key);

            var botFileName = Path.GetFileName(file.Key);
            var entry = archive.CreateEntry(botFileName);
            using var entryStream = entry.open();
            using var fileStream = response.ResponseStream;
            await fileStream.copyToAsync(entryStream);
        }

        return true;
    }

Webapp Angular 服务:

  public getZipData(data,aliasMaquina) {
    let token = localStorage.getItem(constants.jwtSafeguard);
    const headers = new HttpHeaders({
      'Authorization': 'Bearer ' + token,'Content-Type': 'application/json'
    });

    return this.http.get<Blob>(`${environment.safeguardWebApi}Download/getZipData?data=${data}&aliasMaquina=${aliasMaquina}`,{ headers,responseType: 'blob' as 'json',observe: 'response'}).pipe(take(1));
  }

Webapp Angular 组件:

confirmZip(data,aliasMaquina): void {
    this.modalRef.hide();
    this.serviceDownload.getZipData(data,aliasMaquina).subscribe(response => {
        const blob = new Blob([response.body],{ type: 'application/zip' });
        saveAs(blob,"Backup.zip");
    });
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。