asp.net js 将图片转成base64后传到服务器端,报错;The input is not a valid Base-64 string....

FHNP01 2017-07-28 02:34:06
asp.net mvc ,客户端js将图片专程base64后去掉data:image/jpeg;base64,传到后台服务端,报错ERROR - mine_UpLoadImg
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters....。请大神帮忙解决。
客户端js:
mui('body').on('change', '.upload-img', function () {
//mui.alert('1');
var data = this.getAttribute('data'),//正面还是反面
imgDom = document.getElementById(data + 'Box'),//图片容器节点
imgIconDom = document.getElementById(data + 'Icon'),//加号dom节点
reader, imgBase64Data, file, filesize, picquality,
filter = /^image\/jpeg$/i;
file = this.files[0];
filesize = parseInt((file.size) / 1024); //计算图片大小,默认是B,转换成KB
//mui.alert('1');
if (typeof FileReader === 'undefined') {
mui.toast('您的浏览器不支持上传图片');
return false;
}
if (!filter.test(file.type)) {
mui.toast('仅支持上传格式为jpg的图片');
return false;
}
var userId = JSON.parse(localStorage.getItem("user")).UserId;

var pp = $('#hd_picpath').val();
loadingMask();

if (filesize <= 200) {
picquality = 1;
}
else if (filesize > 200 && filesize <= 2048) {
picquality = 0.9;
} else if (filesize > 2048 && filesize <= 4096) {
picquality = 0.8;
} else if (filesize > 2048 && filesize <= 5120) {
picquality = 0.7;
} else if (filesize > 5120 && filesize <= 7168) {
picquality = 0.6;
} else if (filesize > 7168 && filesize <= 9216) {
picquality = 0.5;
} else {
picquality = 0.3;
}
reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (event) {
var img = new Image(),
width = 640, //图片resize宽度
quality = picquality, //图像质量

canvas = document.createElement("canvas"),
drawer = canvas.getContext("2d");
imgBase64Data = event.target.result;
//mui.alert('4');
img.src = event.target.result;
img.onload = function () {
//mui.alert('5');

var orientation = null,degree;
EXIF.getData(this, function() {
orientation = EXIF.getTag(this, 'Orientation');

if (img.width > width) {
canvas.width = width;
canvas.height = width * (img.height / img.width);
} else {
canvas.width = img.width;
canvas.height = img.height;
}

if (orientation === 6) {
canvas.width = img.height;
canvas.height = img.width;
degree = 90 * Math.PI / 180;
drawer.rotate(degree);
drawer.drawImage(img, 0, -img.height);
} else {
drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
}
//drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
imgBase64Data = canvas.toDataURL("image/jpeg", quality).replace("data:image/jpeg;base64,", "");
//mui.alert('6');
/*在这里调用上传接口*/
$.post('/Mine/UpLoadImg', { 'imgData': imgBase64Data, 'imgType': data, 'UserId': userId }, function(obj) {



服务端: public string UpLoadImg(string imgData,string imgType,string UserId)
{
string result = "";
try
{
string f2 = DateTime.Now.ToString("yyyyMMdd");
string currfile = Config.PicPath + f2+"/";
string path = HttpContext.Server.MapPath("~") + currfile;
Random nd = new Random();
string filename = BllMine.GetPicName(nd);
//string pf = "/" + currfile;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);

}
if (!string.IsNullOrEmpty(imgData))
{
//string[] str = imgData.Split(',');
//byte[] image = Convert.FromBase64String(str[1]);
var metadataStart = imgData.IndexOf("data:image/png;base64,");
if (metadataStart!=-1)
{
var len = imgData.Length - 22;
imgData = imgData.Substring(metadataStart + 22, len);
}
byte[] image = Convert.FromBase64String(imgData);
string fileid = BllMine.UpLoadImg(image, imgType, filename, UserId);
System.IO.File.WriteAllBytes(path + filename, image);
result = JsonConvert.SerializeObject(new { status = "ok", data = f2 + "/" + filename, data2 = fileid });

//result = JsonConvert.SerializeObject(new { status = "ok", data = filename });
}
}
...全文
1486 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FHNP01 2017-08-09
  • 打赏
  • 举报
回复
谢谢showbo。
FHNP01 2017-07-31
  • 打赏
  • 举报
回复
现在的问题是我在本地怎么测试都是可以的,log也没有问题,然后在正式的环境里,偶尔会发生这个错误,包含非base64的字符。基本是安卓手机端的。
Go 旅城通票 2017-07-29
  • 打赏
  • 举报
回复
你调用的是webservice吧,转为json字符串调用,自己服务器端将获取的数据写入文件看看是什么内容,客户端也log下看得到什么内容

imgBase64Data = canvas.toDataURL("image/jpeg", quality).replace("data:image/jpeg;base64,", "");
console.log(imgBase64Data )
$.post('/Mine/UpLoadImg',JSON.stringify( { 'imgData': imgBase64Data, 'imgType': data, 'UserId': userId }), function(obj) {

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧