У меня есть график в формате svg, который на стороне клиента я конвертирую, чтобы получить строку Base64 для отправки на сервер. Затем сервер будет использовать эти данные svg вместе с другим параметром для создания PDF-файла с использованием PdfRpt.Core и отправит обратно клиенту.
Как отправить эту строку base64 в контроллер MVC. Я получаю слишком длинную ошибку URI запроса, и все параметры на стороне сервера принимаются как null
Любая помощь высоко ценится!
Javascript Code
function DownloadPdfServer() {
html2canvas($("#MyDiv")[0]).then(function (canvas) {
debugger;
var base64Data = canvas.toDataURL("image/jpeg");
var url = "/MyController/Action";
var startDt = parseInt($('#StartDate').val(), 10);
var endDt = parseInt($('#EndDate').val(), 10);
var req = new XMLHttpRequest();
var params = 'StartDate=' + startDt + '&EndDate=' + endDt + '&base64Data=' + base64Data;
req.open("POST", url, true);
req.responseType = "blob";
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
if (typeof window.navigator.msSaveBlob === 'function') {
window.navigator.msSaveBlob(req.response, "PdfName-" + new Date().getTime() + ".pdf");
} else {
var blob = req.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "PdfName-" + new Date().getTime() + ".pdf";
// append the link to the document body
document.body.appendChild(link);
link.click();
}
}
};
req.send(params);
});
return false;
}
document.getElementById('PrintPDF').addEventListener('click', DownloadPdfServer);
Код на стороне сервера:
public class MyController : BaseController
{
public async Task<ActionResult> Action(string StartDate, string EndDate, string base64Data)
{
string APIUrl = "Data/Get?StartDt = " + StartDate + "&EndDt = " + EndDate;
try
{
// get data from api
var userCriteria = await GetListFromApiAsync<CustomDto>(APIUrl);
var reportBytes = PdfReport.CreateInMemoryPdfReport(userCriteria, StartDate, EndDate, base64Data);
return File(reportBytes, "application/pdf");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
См .: stackoverflow.com/a/15312976/3608792, в частности FormData
Да, используя FormData, я решил мою проблему. Спасибо, Дэн :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы используете POST, но помещаете данные изображения в URL-адрес. Поместите данные изображения в фактическое тело POST.