Загрузите zip-файл из do tnet core web api - PullRequest
0 голосов
/ 26 марта 2020

У меня есть angular машинописное веб-приложение, которое принимает некоторые пользовательские данные. Входные данные отправляются в приложение do tnet core web api для обработки. В результате обработки создается zip-файл, который оборачивает папку с файлами. Мне нужно скачать этот zip-файл как ответ на тот же вызов API.

Мой код контроллера

[HttpPost]
public async Task<ActionResult> PostAsync(MyInput input)
{
  // code to process input, generate folder with files, and zip the folder 
  // zipPath is the full path to the zip file
  // fileName is the file name of the zipPath

  const string contentType = "application/zip";
  FileContentResult result = new FileContentResult(System.IO.File.ReadAllBytes(zipPath), contentType)
  {
    FileDownloadName = fileName,
  };

  return Ok(result);
}

Мой машинописный код находится здесь:

import {downloadFile} from "file-saver";

const httpOptions = {headers: new HttpHeaders({"Content-Type": "application/json"})};

...

download(input: MyInput): Observable<Blob> 
{
    return this.http.post<Blob>(url, input, httpOptions);
}

myFunction(input: MyInput)
{
    this.download(input)
    .subscribe(data => {
      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);
      });
    },
    error => {
      console.log("Something went wrong");
    });
}

Когда Я отлаживаю в данных внутри подписки, fileDownloadName имеет zip-имя файла из веб-API, а contentType это application / zip. Однако fileContents содержит массив, который длиннее, чем размер сжатых байтов из веб-API. Почему размер отличается от его размера в архиве со стороны API?

Код сохранил сжатый файл на клиентском компьютере, однако, когда я пытаюсь открыть его, он показывает «Ошибка сжатых (сжатых) папок» "с сообщением" Сжатая (заархивированная) папка 'C: \ Users {имя пользователя} \ Downloads \ test.zip' недействительна. " Почему?

В строке "a.download =" test.zip "; я жестко закодировал имя файла размера клиента. Как мне получить доступ к data.fileDownloadName (возвращающемуся из веб-API) для инициализации имени файла «Я могу видеть значение, но не знаю, как использовать его в скрипте типа. Я новичок в этом.

Заранее спасибо за помощь.

Рой

...