FromBase64String 因 Kendo 个图表而失败
FromBase64String fails with Kendo charts
我在页面上绘制了 Kendo 图表,我将它们的图像数据发布到一个操作中,以将此 base64 编码数据保存到(SQL 服务器)数据库中。
这是 exportImage
调用,我首先从 dataURL 中拆分了 base64 数据:
chart.exportImage({
width: 727,
height: 262
}).done(function(data) {
// split 'image/png,xxxyyy=' into two
var dataParts = data.split(',', 2);
// TODO: need to strip from 'data:image/png;base64'
dataParts[0] = 'image/png';
$.ajax({
url: "@Url.Action("
Export_TargetPrice ", "
Charts ")",
type: 'POST',
data: {
contentType: dataParts[0],
base64: dataParts[1],
companyID: companyId
}
}).done(function() {
});
});
我的 Export_TargetPrice 方法本质上只是调用 Convert.FromBase64String
然后写入数据库:
/// <summary>
/// Export TargetPrice chart image for company (without download).
/// </summary>
[HttpPost]
public ActionResult Export_TargetPrice(string contentType, string base64, int companyID) {
var fileContents = Convert.FromBase64String(base64);
ChartTargetPriceImage chartImage = new ChartTargetPriceImage {
CompanyID = companyID,
Data = fileContents,
Extension = contentType,
CreateDate = DateTime.Now
};
db.ChartTargetPriceImage.Add(chartImage);
db.SaveChanges();
return new HttpStatusCodeResult(HttpStatusCode.OK); // 200
}
我正在使用 base64decode.org 查看我是否可以从数据库数据中成功解码 base64(也使用 freeformatter.com)。它经常失败,但没有明显的原因或模式。它对一家公司来说是失败的,但如果我明天尝试它可能会奏效。
之前我生成了10个图表(一个页面有50个,我可以生成我需要的任何一个),其中一半失败了。它们是相同的图表 - 相同的设计,来自部分 - 只是数据不同。
在浏览器中,我可以复制收到的 base64
variable/data 并通过 freeformatter.com 从中成功创建图表,但数据库数据可能会失败。
为什么这个过程失败了? (为什么它只在某些时候失败?)
我还尝试了以下方法但没有效果:检查 FormatException(如果数据不是 4 的倍数),然后实际尝试通过填充等号使其成为 4 的倍数。
byte[] fileContents;
// check if multiple of 4
int overFour = base64.Replace(" ", "").Length % 4;
if (overFour > 0) {
// add trailing padding '='
base64 += new string('=', 4 - overFour);
}
try {
fileContents = Convert.FromBase64String(base64);
} catch (FormatException ex) {
return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, base64.Length.ToString());
}
我也检查了接收到的base64数据不包含任何意外字符。
很明显,在这种情况下使用 base64decode.org 等工具是不合适的,代码可以正常工作,问题在于最终从数据中检索和创建图像.
我在页面上绘制了 Kendo 图表,我将它们的图像数据发布到一个操作中,以将此 base64 编码数据保存到(SQL 服务器)数据库中。
这是 exportImage
调用,我首先从 dataURL 中拆分了 base64 数据:
chart.exportImage({
width: 727,
height: 262
}).done(function(data) {
// split 'image/png,xxxyyy=' into two
var dataParts = data.split(',', 2);
// TODO: need to strip from 'data:image/png;base64'
dataParts[0] = 'image/png';
$.ajax({
url: "@Url.Action("
Export_TargetPrice ", "
Charts ")",
type: 'POST',
data: {
contentType: dataParts[0],
base64: dataParts[1],
companyID: companyId
}
}).done(function() {
});
});
我的 Export_TargetPrice 方法本质上只是调用 Convert.FromBase64String
然后写入数据库:
/// <summary>
/// Export TargetPrice chart image for company (without download).
/// </summary>
[HttpPost]
public ActionResult Export_TargetPrice(string contentType, string base64, int companyID) {
var fileContents = Convert.FromBase64String(base64);
ChartTargetPriceImage chartImage = new ChartTargetPriceImage {
CompanyID = companyID,
Data = fileContents,
Extension = contentType,
CreateDate = DateTime.Now
};
db.ChartTargetPriceImage.Add(chartImage);
db.SaveChanges();
return new HttpStatusCodeResult(HttpStatusCode.OK); // 200
}
我正在使用 base64decode.org 查看我是否可以从数据库数据中成功解码 base64(也使用 freeformatter.com)。它经常失败,但没有明显的原因或模式。它对一家公司来说是失败的,但如果我明天尝试它可能会奏效。
之前我生成了10个图表(一个页面有50个,我可以生成我需要的任何一个),其中一半失败了。它们是相同的图表 - 相同的设计,来自部分 - 只是数据不同。
在浏览器中,我可以复制收到的 base64
variable/data 并通过 freeformatter.com 从中成功创建图表,但数据库数据可能会失败。
为什么这个过程失败了? (为什么它只在某些时候失败?)
我还尝试了以下方法但没有效果:检查 FormatException(如果数据不是 4 的倍数),然后实际尝试通过填充等号使其成为 4 的倍数。
byte[] fileContents;
// check if multiple of 4
int overFour = base64.Replace(" ", "").Length % 4;
if (overFour > 0) {
// add trailing padding '='
base64 += new string('=', 4 - overFour);
}
try {
fileContents = Convert.FromBase64String(base64);
} catch (FormatException ex) {
return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, base64.Length.ToString());
}
我也检查了接收到的base64数据不包含任何意外字符。
很明显,在这种情况下使用 base64decode.org 等工具是不合适的,代码可以正常工作,问题在于最终从数据中检索和创建图像.