![](/img/trans.png)
[英]The input is not a valid Base-64 string on converting a pdf as base64 string to byte array
[英]Exception when converting to image from Base-64 string
我試圖通過ASP.NET按鈕單擊上的圖像發送Highcharts圖表。 我想要做的是:
將圖表轉換為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個字符,兩個以上的填充字符或填充字符中的非法字符。”}
但是當我刪除'data:image / svg + xml; base64'然后轉換它時,它不會拋出異常,但圖像不會出現。 我該怎么辦?
謝謝
擺脫字符串的開頭部分:“data:image / svg + xml; base64”,那部分不是base64,只是剩下的部分。 您也不需要使用HttpUtility.UrlDecode。
您應該將TransferEncoding指定為Base64:
res.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
然而,盡管如此, 在電子郵件中使用SVG還是有一些強烈的警告 。 因此,您可能需要考慮不同的格式,例如JPG或PNG。 如果這是您所采用的路線,則需要使用庫來轉換格式。
在經過多次研究后我找到了解決方案,主要問題是並非所有客戶端電子郵件都支持數據URI: 主要電子郵件客戶端軟件中的數據URI支持是什么?
我試圖打開Outlook 2016的郵件,但它不受支持,當我從hotmail.com打開它工作..
代碼是:
MailMessage mailMsg = new MailMessage();
SmtpClient client = new SmtpClient();
var imageData = Convert.FromBase64String(data);
var contentId = Guid.NewGuid().ToString();
var linkedResource = new LinkedResource(new MemoryStream(imageData), "image/svg+xml");
linkedResource.ContentId = contentId;
linkedResource.TransferEncoding = TransferEncoding.Base64;
var body = string.Format("<img src=\"cid:{0}\" />", contentId);
var htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html");
htmlView.LinkedResources.Add(linkedResource);
mailMsg.AlternateViews.Add(htmlView);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.