Я хочу опубликовать свое изображение, захваченное html2canvas, на свой контроллер c #, получить его и вставить в тело письма, готового к отправке.
Я пытаюсь использовать angularjs для публикации большого двоичного объекта, который былпреобразован из base64, возвращенного функцией html2canvas toDataURL ().Я считаю, что, возможно, я должен опубликовать его как FormData (), чтобы в c # я мог получить его и восстановить его как изображение для отображения в теле письма.
После this было предложено преобразовать base64 в BLOB-объект, но "body" получен как "ноль" в c #.Получатель и тема заполнены правильно, но только тело получено как «ноль».Я попытался передать строку base64, которая объясняет функцию getEmbeddedImage в моем контроллере.Я хочу попробовать использовать FormData (), но мне не удалось найти какую-либо информацию для получения FormData () и создания большого двоичного объекта для отображения пользователю.
Angularjs:
html2canvas($('#quoteTable')[0], {
letterRendering: 1,
allowTaint: true,
width: 1600,
height: 1800
}).then(function (canvas) {
img = canvas.toDataURL();
var tempImg = img;
var base64ImageContent = tempImg.replace(/^data:image\/(png|jpg);base64,/, "");
var blob = $scope.base64ToBlob(base64ImageContent, 'image/png');
//var formData = new FormData();
//formData.append('picture', blob);
var data = {
recipientEmail: "sample@sample.co.uk",
subject: "test mail",
body: blob
};
$http.post('/Home/EmailQuote', JSON.stringify(data)).then(function (response) {
if (response.data)
$scope.msg = "Post Data Submitted Successfully!";
}, function (response) {
$scope.msg = "Service not Exists";
$scope.statusval = response.status;
$scope.statustext = response.statusText;
$scope.headers = response.headers();
});
var win = window.open();
win.document.open();
win.document.close();
})
.catch(function (error) {
/* This is fired when the promise executes without the DOM */
alert("could not generate canvas");
});
Inмой контроллер Я не уверен, какой тип поставить для "тела" перегрузки и как я передам его на стороне angularjs:
[HttpPost]
public void EmailQuote(string recipientEmail, string subject, string body)
{
SmtpClient client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("sample@gmail.com", "password");
MailMessage mm = new MailMessage();
mm.From = new MailAddress("sample@sample.co.uk");
mm.To.Add(recipientEmail);
mm.Subject = subject;
mm.IsBodyHtml = true;
mm.AlternateViews.Add(getEmbeddedImage(body));
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
try
{
client.Send(mm);
ViewBag.MyProperty = "Successfully sent email";
}
catch (SmtpException ex)
{
ViewBag.Message = "Exception caught: " + ex;
}
}
private AlternateView getEmbeddedImage(String filePath)
{
LinkedResource res = new LinkedResource(filePath);
res.ContentId = Guid.NewGuid().ToString();
string htmlBody = @"<img src='cid:" + res.ContentId + @"'/>";
AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
alternateView.LinkedResources.Add(res);
return alternateView;
}
Я посмотрел на это: Как читать FormDataC # Тем не менее, мне становится неясно, когда речь идет о восстановлении большого двоичного объекта. Нужна ли мне библиотека для конструктора BLOB-объектов и каждый их атрибут задается содержимым FormData, а затем отображает эти данные в теле?