Мой проект Angular не может загрузить (для Сохранить как) файл PDF через ядро Api ASP.NET.PDF-файл хранится на сервере SQL.
Я пробовал несколько способов, опубликованных в stackoverflow, но ни один из них не работает для меня.Некоторые примеры загружают файл PDF, но если его пытались открыть, он обнаружил ошибку «..не поддерживает ... поврежден».
API (я предпочитаю возвращать строку вместо одного байта vaule []только)
[HttpGet]
[Route("detail/{studentid:int}/{reportSeq:int}")]
public async Task<ActionResult<byte[]>> GetStudentAcademicReport2(int StudentID, int ReportSeq)
{
var report = await _context.AcademicReportDetails.FromSql("select * from [dbo].[ufnStudentAcademicReport] (8213, 8158)").FirstOrDefaultAsync();
if (report == null)
{
return NotFound();
}
return report.ReportContent;
}
- Не работает в Angular
this.httpClient.get ("https://localhost:44369/api/values/detail/8213/8158", {responseType: 'blob'})
.subscribe (response => {console.log (response);
const url = window.URL.createObjectURL(new Blob([response]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
Не работает в Ангуле
this.httpClient.get ("http://localhost:5000/api/studentacademicreports/detail/8213/8158", {responseType: 'arraybuffer'})
.subscribe (response => {console.log(ответ);
const file = new Blob([response], {type: 'application/pdf'});
const fileURL = window.URL.createObjectURL(file);
let objectURL = 'data:image/jpeg;base64,' + response;
let fileURL2 = this.sanitizer.bypassSecurityTrustUrl(objectURL);
const link = document.createElement('a');
link.href = fileURL;
link.download = 'sample.pdf';
link.click();
Работа в проекте формы Windows
cmd.CommandText = "select * from [dbo]. [ufnStudentAcademicReport] (8213, 8158)"; cmd.CommandType = CommandType.Text;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
DbDataReader read = cmd.ExecuteReader();
if (read.HasRows)
{
while (read.Read())
{
byte[] b = null;
b = (byte[])read.GetValue(read.GetOrdinal("ReportContent"));
System.IO.File.WriteAllBytes(@"c:\temp\test.pdf", b);
}
}
Не работает в проекте формы Windows через API
HttpClient http = new HttpClient(); var NewResponse = await http.GetAsync ("https://localhost:44369/api/values/detail/8213/8158");
var content = await NewResponse.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes(@"c:\temp\test111.pdf", content);
Как видно из приведенных выше примеров кода, он работает, если PDF-файл в varbinary (Max) загружается напрямую с использованием SQLCommand, ноне работает, если PDF загружен через API. Я подозреваю, что API возвращает байт [] в формате Json. Фотографии учеников успешно отображаются через API без каких-либо проблем, но загрузка файла PDF не работает. Что вызывает загруженные файлы PDFповреждены в моих кодах?