标签:服务端 问题 byte 表单 plugins info result png 自动
最近的公司项目要求,让我找到一个可以让 echart转换为图片输入excal的功能,有几个点的总结,拿出来和大家分享。
思路是这样的:
将echart图在js里转换为imgbase64位格式再用表单post传递到后台,然后再在后台将base64转换为图片,给图片定义随机名称,储存在服务端,将储存路径
获取传到excal图片插入的参数后,这样就ok了。 也考虑了 导出迸发量问题。如果两个人同时导出也是不会有问题的。
1.base64位截取到正确的数据传递到后台,给后台解析
var picBase64Info = myChart.getDataURL().split("data:image/png;base64,"); //获取base64编码 //base64位转换后的前面的头要掐掉
2.将imgbase64传递到后台,这个问题我卡了有好一会,技术不行,.net的小菜鸟~
$.ajax({ url:‘@Url.Action("img")‘, type:‘POST‘, contentType:"application/x-www-form-urlencoded", data:{ //掐掉以后是一个数组 取第二个 pic:picBase64Info[1] }, success:function(data){ //下面是我的excal导出路径 var url = ‘@Url.Action("ExportExcel")‘ + "?projectid=" + projectId + "&starttime=" + starttime + "&endtime=" + endtime+"&chartfilename="+data; window.open(url); $("#excelExport").removeAttr("disabled"); } });
3.将base64解析储存在服务端
[HttpPost] public string img(string pic) { //文件名称 var filename = Path.GetRandomFileName(); //下面是我的文件路径 string imagesu = Server.MapPath("~/Plugins//III.Web.SaleDemo/Content/Images/ExcalImage/"+filename); //考虑到文件名重复,将会自动删除掉 var isNull = System.IO.File.Exists(imagesu); if (isNull) { //重复就delete System.IO.File.Delete(imagesu); } //转换base64 var picbytes = Convert.FromBase64String(pic); var bitmap = new Bitmap(new MemoryStream(picbytes)); //存储图片,并且定义格式 bitmap.Save(imagesu, ImageFormat.Png); return filename; }
4.excal导出
[HttpGet] public ActionResult ExportExcel(int projectId, DateTime starttime, DateTime endtime,string chartfilename) { //第四个参数是文件名 /........ string imagesu = Server.MapPath("~/Plugins//III.Web.SaleDemo/Content/Images/ExcalImage/"+ chartfilename); }
5.最后案例excal的图片插入吧
ExcelPicture picture2 = ws.Drawings.AddPicture("yuan", Image.FromFile(imagesu));//插入图片 picture2.SetPosition(280, 30);//设置图片的位置 picture2.SetSize(800, 350);//设置图片的大小
这就是我的总结啦= = ,记录成长。
2017/10/13 实习第三个月
标签:服务端 问题 byte 表单 plugins info result png 自动
原文地址:http://www.cnblogs.com/wufanJY/p/7662767.html