架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 35398|回复: 2

[资料] 卧槽,base64字符串转图片终于搞定了

[复制链接]
发表于 2016-1-28 17:22:02 | 显示全部楼层 |阅读模式
QQ截图20160128160707.jpg

以前,也经常做base64转图片,从来没出现过什么问题,
今天,我前台用js把Canvas转成的Base64位字符串

  1. var bbb = a.toDataURL("image/jpeg", 1.0);
复制代码


bbb是我们得到的字符串,然后我用ajax传到的后台,如下;

  1. $("#btnajax").click(function () {
  2.                 var a = cropper.getCroppedCanvas({ width: 180, height: 180 });
  3.                 var bbb = a.toDataURL("image/jpeg", 1.0);
  4.                 $.post("/Home/AjaxPost", "data=" + bbb, function (msg) {
  5.                     if (msg.success = true)
  6.                     {
  7.                         alert("成功");
  8.                     }
  9.                 })
  10.             });
复制代码



后台接收代码:

  1. [HttpPost]
  2.         public JsonResult AjaxPost()
  3.         {
  4.             string temp = Request["data"].Split(',')[1];
  5.             var btsdata = Convert.FromBase64String(temp);
  6.             string uploadDir = Server.MapPath("/UploadAvatar/" + Guid.NewGuid().ToString("D") + ".jpg");
  7.             System.IO.Directory.CreateDirectory(Server.MapPath("~")+"UploadAvatar");
  8.             using (Image img = Image.FromStream(new MemoryStream(btsdata)))
  9.             {
  10.                 img.Save(uploadDir, ImageFormat.Jpeg);
  11.             }
  12.             return Json(new { success = true });
  13.         }
复制代码


我靠,竟然第二句报错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


错误列表

{"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "}
{"Invalid length for a Base-64 char array or string."}

第一个错误是,因为,字符串中带有data:image/jpeg;base64这玩意,把这玩意去掉就好了!

  1. string temp = Request["data"].Split(',')[1];
复制代码


这段代码解决第一个错误!!!


第二个错误,不知道 因为啥错的,搞了一个小时,最后从老外论坛看到了几句话

The length of a base64 encoded string is always a multiple of 4. If it is not a multiple of 4, then = characters are appended until it is. A query string of the form ?name=value has problems when the value contains = charaters (some of them will be dropped, I don't recall the exact behavior). You may be able to get away with appending the right number of = characters before doing the base64 decode.

翻译后如下,大体看看就行了

一个Base64编码的字符串的长度是4的倍数。如果不是4的倍数,然后=字符追加直到。一个表格的查询字符串?name=value有问题的时候价值包含=特征(他们中的一些会下降,我不记得确切的行为)。你可以去添加正确的数量=人物之前做base64解码。

最后,加了几句代码,就搞定了,完整代码如下:

  1. [HttpPost]
  2.         public JsonResult AjaxPost()
  3.         {
  4.             string temp = Request["data"].Split(',')[1];
  5.             temp = temp.Replace(" ", "+");
  6.             int mod4 = temp.Length % 4;
  7.             if (mod4 > 0)
  8.             {
  9.                 temp += new string('=', 4 - mod4);
  10.             }

  11.             var btsdata = Convert.FromBase64String(temp);
  12.             string uploadDir = Server.MapPath("/UploadAvatar/" + Guid.NewGuid().ToString("D") + ".jpg");
  13.             System.IO.Directory.CreateDirectory(Server.MapPath("~")+"UploadAvatar");
  14.             using (Image img = Image.FromStream(new MemoryStream(btsdata)))
  15.             {
  16.                 img.Save(uploadDir, ImageFormat.Jpeg);
  17.             }
  18.             return Json(new { success = true });
  19.         }
复制代码






上一篇:推荐一款js图片裁切插件
下一篇:Microsoft.Office.Interop.Word文档动态生成表格
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-2-1 10:27:11 | 显示全部楼层
插件整个代码放上来啊
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-3-2 10:43:08 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-2-3 15:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表