zoukankan      html  css  js  c++  java
  • FromBase64String 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符

    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;
            }

    这样就好了

  • 相关阅读:
    Linux systemctl命令笔记
    网站建设部署与发布--笔记4-部署mysql
    网站建设部署与发布--笔记3-部署Nginx
    c++模板文件,方便调试与运行时间的观察
    最大公约数-辗转相除及其证明
    汉诺塔-递归
    全排列算法-递归
    蓝桥-愤怒的小鸟
    PAT Basic 1032
    浮点数精度的修正 相等,大于小于
  • 原文地址:https://www.cnblogs.com/lixipeng/p/7380618.html
Copyright © 2011-2022 走看看