下载文件 Angular,.Net 5

Download files Angular, .Net 5

我在下载文件时遇到问题。 下载文件后发现是空的,我以为是哪里出了问题headers,但一直想不通。

我有回复body from controller

但是我的响应数组缓冲区是空的 from component

并下载空 zip

我做错了什么?

request.component.ts

downloadZip() {
  this.requestService.downloadZip(this.request.id)
    .subscribe((res) => {
      const blob = new Blob([res], { type: 'application/zip' });
      saveAs(blob, 'Обращение №' + this.request.id + '.zip');
    })
}

request.service.ts

downloadZip(requestId: number): Observable<any> {
  return this.http.get(this.apiUrl + '/request/downloadZip?id=' + requestId, { responseType: 'arraybuffer'});
}

RequestController.cs

[HttpGet]
[Route("api/request/downloadZip")]
public async Task<IActionResult> DownloadZip(int id)
{
    var stream = await _fileStoreService.GetRequestFilesZip(id);

    Response.Body = stream;
    Response.ContentType = "application/zip";

    return Ok();
}

FileStoreService.cs

public async Task<MemoryStream> GetRequestFilesZip(int id)
{
    var query = await _db.RequestMedia
        .Where(_ => _.RequestId == id)
        .ToListAsync();

    var fileSharePath = Path.Combine(_configuration["FileTableRootPath"], "RequestFileStore");

    var files = new List<string>();
    foreach (var media in query)
        files.Add(Path.Combine(fileSharePath, media.Hash + Path.GetExtension(WebUtility.HtmlDecode(media.Name))));

    var memory = new MemoryStream();
    ZipStrings.UseUnicode = true;
    using(var zipStream = new ZipOutputStream(memory))
    {
        zipStream.SetLevel(3);

        foreach(var file in files)
        {
            var entry = new ZipEntry(Path.GetFileName(file))
            {
                DateTime = DateTime.Now
            };

            zipStream.PutNextEntry(entry);

            var inStream = new MemoryStream();
            using var f = new FileStream(file, FileMode.Open, FileAccess.Read);
            await f.CopyToAsync(inStream);

            inStream.Close();

            var content = inStream.ToArray();
            await zipStream.WriteAsync(content.AsMemory(0, content.Length));
            zipStream.CloseEntry();
        }

        zipStream.IsStreamOwner = false;
    }

    memory.Position = 0;

    return memory;
}

我改了这个

request.service.ts

downloadZip(requestId: number) {
  return this.http.get(this.apiUrl + '/request/downloadZip?id=' + requestId, { responseType: 'blob'});
}

还有这个

RequestController.cs

[HttpGet]
[Route("api/request/downloadZip")]
public async Task<IActionResult> DownloadZip(int id)
{
    var stream = await _fileStoreService.GetRequestFilesZip(id);

    return new FileStreamResult(stream, "application/zip");
}

一切正常