js前台:
<input id="upload_img_input" v-on:change="onFileChange" type="file" multiple/> onFileChange(e) { var files = e.target.files || e.dataTransfer.files; if (!files.length)return; this.createImage(files); }, createImage(file) { if(typeof FileReader==='undefined'){ alert('您的浏览器不支持图片上传,请升级您的浏览器'); return false; } var image = new Image(); var vm = this; var leng=file.length; for(var i=0;i<leng;i++){ var reader = new FileReader(); reader.readAsDataURL(file[i]); reader.onload =function(e){ vm.images=e.target.result; }; } }
1.上面代码将图片生成base64的字符串,该字符串以分号切割 例如这样的格式 "data:image/png;base64,iVBORw0KGgo.............."
该字符串的第一部分"data:image/png;base64" 是代表该Base64字符串对应的原始类型,第二部分是该文件生成的内容
2.在C#语言的后台 我们直接获取该字符串,并对其分割转化为图片,注意如不分割 FromBase64String 方法会报错,提示输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。所以我们只取第二部分的内容出来转化就好了,因为第一部分包含着文件格式
public JsonResult PDUploadImage(string img) { string error = ""; SaveImage(@"C:UsersJUNON37DesktopPictures123", img, ref error); return Json("", JsonRequestBehavior.AllowGet); } private bool SaveImage(string file_name, string img_string, ref string error) { try { string[] img_array = img_string.Split(','); byte[] arr = Convert.FromBase64String(img_array[1]); using (MemoryStream ms = new MemoryStream(arr)) { Bitmap bmp = new Bitmap(ms); if (img_array[0].ToLower() == "data:image/jpeg;base64") { bmp.Save(file_name + ".jpg"); } else if (img_array[0].ToLower() == "data:image/png;base64") { bmp.Save(file_name + ".png"); } else { error = "不支持该文件格式。"; return false; } } } catch (Exception ex) { error = "生成图片发生错误。" + ex.ToString(); return false; } return true; }
这样就好了