Я пытался заставить это работать в течение нескольких дней, после нескольких примеров на этом и других сайтах, я думаю, что я близок, но еще не там ..
Цель состоит в том, чтобы иметь возможность загружать файл PDF в веб-приложение Angular из веб-API, построенного на ядре ASP.net.
Это код для контроллера API:
// GET: api/Invoices/File/5
[HttpGet("file/{id}")]
public IActionResult GetInvoiceFile([FromRoute] int id)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var invoices = _context.Invoices.Find(id);
if (invoices == null)
{
return NotFound();
}
else
{
string File2Return = "";
string Filename2Return = "";
File2Return = invoices.FilePath4Download;
Filename2Return = invoices.FileName;
//Change rout to match the route on the server
File2Return = "d:\\home" + File2Return.Substring(2);
var bytes = System.IO.File.ReadAllBytes(@File2Return);
return File(bytes, "application/octet-stream", Filename2Return);
}
}
И вот код, который я использую в приложении Angular для загрузки этого файла:
// For invoice download
import * as saveAs from 'file-saver';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
...
...
...
let myUrl = this.data.InvoicesFileUrl +invoiceId.toString().trim();
this.http.get(myUrl).subscribe(
data => {
const dataFile = data;
saveAs(dataFile, 'document.pdf');
},
err => { console.info(err); }
);
Если я тестирую вызов API с почтальоном, я вижу, что контроллер работает и возвращает содержимое файла PDF в виде потока.
Но когда я пробую это с кодом Angular выше, это, кажется, обнаружение и ошибка ... забавно то, что ошибка, напечатанная на Консоли, является "Ок".
Таким образом, даже несмотря на то, что состояние, полученное от контроллера, равно 200 (проверено на Postman) ... Angular считает, что это ошибка, и функция SaveAS () никогда не выполняется.
Есть идеи, что я делаю не так?