首页 新闻 搜索 专区 学院

请教一个图片转base64字符串的问题...

0
悬赏园豆:10 [已解决问题] 解决于 2015-08-06 13:44

我在前端用js将图片转成Base64字符串,通过ajax上传到另一台服务器上.

在服务器端反转成图片时失败..

仔细比较后,发现.net转出来的Base64字符,与js转出来的不一样,C#转出来的末尾要多几个字符,

如下图:

 

开始我以为可能js转的时候没有将图片格式的扩展名转进去,后来我单独将扩展名的部分转出来,不等于上边的那几个字符..

 

下边是我js转和c#转的代码,麻烦大家帮我看下怎么解决..

 

前端JS

  var reader = new FileReader();
                    reader.onload = function (e) {
                        //图片base64数据
                        var imgBase64Data = e.target.result;
                        var pos = imgBase64Data.indexOf("4")+2;
                        imgBase64Data = imgBase64Data.substring(pos, imgBase64Data.length - pos);//去掉Base64:开头的标识字符
                        $.ajax({
                            type: "POST",
                            url: "http://imginapi.com/image/AddImage",
                            async: false,
                            xhrFields: { withCredentials: true },
                            data: { 'base64StrImgData': imgBase64Data, 'imgFormat':  fileext},
                            dataType: "text",
                            success: function (data) {
                                alert(data);
                               domUtils.on(iframe, 'load', callback);
                            },

                            error: function (err) {
                                alert("error");
                                alert(err.responseText);
                            }

                        });
                        return;

                    };
                    reader.readAsDataURL(input.files[0]);

 

后台C#代码:

/// <summary>  
        /// 图像转换为Base64编码  
        /// </summary>  
        /// <param name="image">图像</param>  
        /// <param name="format">图像格式</param>  
        /// <param name="throwException">出现异常时是否抛出</param>
        /// <returns>转换成功返回其Base64编码;失败返回空串</returns>  
        public static string ImageToBase64(System.Drawing.Image image, ImageFormat format, OPResult opRes, bool throwException = false)
        {
            return ExceptionHelper.ExceptionRecord(() =>
            {
                string base64String = "";
                try
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        image.Save(ms, format);
                        byte[] imageBytes = ms.ToArray();
                        base64String = Convert.ToBase64String(imageBytes);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("将图片转成base64字符串时出现异常:" + ex);
                }

                return base64String;
            }, opRes, throwException);
        }

 

说明一下,不是传到后台后没有用escape编码的问题,在前台跟踪时还没开始ajax请求,仅仅是刚刚转成Base64字符的时候.

 

为什么会多出几个字符呢..哪位高手知道?

hexllo的主页 hexllo | 菜鸟二级 | 园豆:405
提问于:2015-08-06 11:41
< >
分享
最佳答案
0

Base64应该是C#出来的那种结果,怀疑你的js转换出问题了。先把e.target.result打印出来看看,是不是截取出问题了。另外可以考虑使用canvas.toDataUrl这种方式来创建base64字符串。

收获园豆:10
幻天芒 | 高人七级 |园豆:36594 | 2015-08-06 12:24

太对了.就是截取出问题了..谢谢提醒

hexllo | 园豆:405 (菜鸟二级) | 2015-08-06 13:44

@hexllo: 搞定就好!

幻天芒 | 园豆:36594 (高人七级) | 2015-08-06 16:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册