Загрузить файл с использованием ядра Web API и Angular 7

#download #asp.net-core-webapi #angular7 #imagedownload

#Скачать #asp.net-core-webapi #angular7 #imagedownload

Вопрос:

Я пытаюсь загрузить файл (изображение или PDF) с помощью angular, но безуспешно. Я сделал, как показано ниже

 <a href="https://localhost:44344/UploadedFiles/IMG_20190314_205925_3be1d2b3-3bac-4184-8468-995d58d5ff80.jpg">Downlod image</a>
  

Изображение открывается на той же вкладке, но не загружается.

Итак, я подумал сделать это через Web API Core. Для этого я написал приведенный ниже код.

         public async Task<IActionResult> DownloadFile(string filename)
        {
            if (filename == null)
                return Content("filename not present");

            var path = Path.Combine(
                           _hostingEnvironment.ContentRootPath,
                           "UploadedFiles", filename);

            var memory = new MemoryStream();
            using (var stream = new FileStream(path, FileMode.Open))
            {
                await stream.CopyToAsync(memory);
            }
            memory.Position = 0;
            return File(memory, GetContentType(filename), Path.GetFileName(path));
        }

        private string GetContentType(string path)
        {
            var types = GetMimeTypes();
            var ext = Path.GetExtension(path).ToLowerInvariant();
            return types[ext];
        }

        private Dictionary<string, string> GetMimeTypes()
        {
            return new Dictionary<string, string>
            {
                {".pdf", "application/pdf"},
                {".png", "image/png"},
                {".jpg", "image/jpeg"},
                {".jpeg", "image/jpeg"},
            };
        }
  

Затем я вызвал этот api с помощью Swagger, тогда он работает.

Но когда я сделал это с angular 7, как показано ниже

HTML-код

  <button type="button" (click)="downloadFile(doc.documentName)">Download</button>
  

код файла component.ts

  downloadFile(fileName: string) {
    this.documentService.downloadFile(fileName).subscribe((res: any) => {
      console.log(res);
    });
  

service.ts

 downloadFile(fileName: any) {
    return this.http.get(this.baseUrl   "Document/DownloadFile/"   fileName);
  }
  

Когда я запускаю свое приложение, нажимаю на кнопку загрузки, функция api выполняется успешно, но в angular в консоли появляется ошибка, подобная приведенной ниже.

введите описание изображения здесь

В чем проблема? Я просто хочу, чтобы файл был загружен нажатием кнопки. пожалуйста, направьте меня.

Ответ №1:

Для простейшего способа достижения ваших требований вы могли бы использовать <a href без вызова кода angular.

 <a href="https://localhost:44344/Document/DownloadFile/file name">Downlod image</a>
  

Генерируйте приведенный выше URL-адрес с помощью вашей собственной бизнес-логики.

Обратите внимание, что приведенный выше URL-адрес является путем для DownloadFile действия вместо статических файлов в wwwroot старше.

Комментарии:

1. Когда я нажимаю на ссылку, изображение открывается на той же вкладке, а не загружается. Я не знаю, почему?

2. @GopalSharma Какой URL-адрес вашего запроса? Попробуйте https://localhost:44344/api/Document/UploadedFiles/IMG_20190314_205925_3be1d2b3-3bac-4184-8468-995d58d5ff80.jpg