Я использую JSPDF для создания PDF-файлов на стороне клиента приложения, чтобы все браузеры, кроме IE 8, автономная совместимость. Поскольку JSPDF не работает с IE8 (IE8 ограничивает размер HTTP GET), решение состояло в том, чтобы отправить сообщение в действие API, которое сохранит файл на сервере и вернет ссылку на клиент, на котором он размещен. (Поддержка IE8 НЕ обязательно должна быть автономной).
Я отправляю необработанные байты, выводимые JSPDF, на сервер, и он может отлично сохранять PDF-файл, если в PDF-файле нет изображения. Когда есть изображение, данные повреждены, и это вызывает переполнение памяти при попытке открыть файл.
Почему изображение может быть зашифровано неправильно? Мое первоначальное предположение состояло в том, что необработанные байты содержали недопустимый символ, но быстрая проверка источника файла PDF показывает, что это, вероятно, не так.
Действие контроллера:
public struct PdfBytesContainer
{
public byte[] RawPdfBytes { get; set; }
}
[HttpPost]
public string Post(PdfBytesContainer container)
{
var fileName = "test";
File.WriteAllBytes(@"PathToFile\File.pdf", container.RawPdfBytes);
return fileName;
}
ПОСЛАНИЕ AJAX:
var pdfData = {
rawPdfBytes: doc.output()//.substring(0, 100)
};
$.ajax({
url: pdfApiUrl,
type: "POST",
data: pdfData,
success: function(response) {
var url = "/Content/Pdfs/" + response + ".pdf";
window.open(url,'_blank');
},
failure: function(response) {
alert("failed " + response);
}
});
Примечание. Я также пытался использовать строку вместо byte[] в структуре PdfBytesContainer. Я получаю ту же ошибку.