Я использую MigraDo c для создания PDF, он отлично сохраняется на локальном компьютере, но когда я отправляю этот поток файлов в webapi, браузер открывает его с пустым содержимым.
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(new MemoryStream(pdfByteArray))
};
response.Content.Headers.ContentDisposition =
new ContentDispositionHeaderValue("attachment")
{
FileName = "MyPdf.pdf"
};
response.Content.Headers.ContentType =
new MediaTypeHeaderValue(@"application/pdf")
response.Content.Headers.ContentLength = pdfByteArray.Length;
return response;
Когда я открываю инструменты разработчика в Chrome, я вижу, что некоторые символы ответа выглядят так:
Хотя при попытке создать локальный файл, использующий тот же поток байтов:
using (Stream stream = File.Create(@"d:\work\Test.pdf"))
{
new MemoryStream(pdfByteArray).CopyTo(stream);
}
Он правильно отображает содержимое PDF.
Я пытался указать другой CharSet в Response Content-Type (например, UTF-7, UTF-8, windows -1252 et c) и вижу, что символы ответа меняются, но результат тот же - я вижу пустой PDF. Еще одно замечание: когда я отправляю Json с pdfByteArray, закодированным в Base64, в пользовательском интерфейсе я могу декодировать это и создать правильный PDF. Я пытаюсь найти способ отправки содержимого приложения / pdf и позволить браузеру правильно отображать PDF.