我試圖通過ASP.NET按鈕單擊圖像發送Highcharts圖表。 我所試圖做的是:圖表從Base-64字符串轉換爲圖像時出現異常
轉換爲Base64圖像,代碼如下:
var chart = $('#main-content').highcharts();
EXPORT_WIDTH = 1000;
var render_width = EXPORT_WIDTH;
var render_height = render_width * chart.chartHeight/chart.chartWidth;
var svg = chart.getSVG({
exporting: {
sourceWidth: chart.chartWidth,
sourceHeight: chart.chartHeight
}
});
var contentToSend = 'data:image/svg+xml;base64,' + window.btoa(svg);
var hdnField = document.getElementById("MainContent_ChartImage");
hdnField.value = contentToSend;
下一步正在以base64形象價值,將其轉換爲圖像的附加到郵件,代碼:
string textImage = ChartImage.Value;
var imageData = Convert.FromBase64String(HttpUtility.UrlDecode(data));
System.Net.Mail.LinkedResource res;
AlternateView htmlView;
using (MemoryStream ms = new MemoryStream(imageData, true))
{
ms.Position = 0;
ms.Write(imageData, 0, imageData.Length);
ms.Seek(0, SeekOrigin.Begin);
res = new System.Net.Mail.LinkedResource(ms);
htmlView = AlternateView.CreateAlternateViewFromString("<html><body><img src='cid:imageReport' width='100%' ></body></html>", null, "text/html");
res.ContentId = "imageReport";
htmlView.LinkedResources.Add(res);
MailMessage mailMsg = new MailMessage();
SmtpClient client = new SmtpClient();
// ...
mailMsg.IsBodyHtml = true;
mailMsg.AlternateViews.Add(htmlView);
client.Send(mailMsg);
}
但該方法Convert.FromBase64String
拋出一個異常
{「該輸入不是有效的Base-64字符串,因爲它包含填充字符中的非基本64 字符,多於兩個填充字符或非法字符 。 「}
然而,當我刪除?‘數據:圖像/ SVG + XML的;的base64’,然後將其轉換,它不會拋出異常,但圖像不會出現,應該怎麼辦
謝謝
我在電子郵件方面的專家,但你不能只轉儲的base64內容直入電子郵件的地方,而不是去通過存儲流?關於你的問題 - 數據如何從客戶端到服務器,你可能會發現你不需要'HttpUtility.UrlDecode' - 框架可能會爲你處理它。 –
我試圖把base64圖像作爲圖像源,但它沒有工作@JamesThorpe –
你確定它是一個有效的base64字符串嗎? – KSib