苏飞论坛

标题: 轻松解决:接收base64上传图片出现错误“Base-64 字符数组或字符串的长度无效” [打印本页]

作者: 范范    时间: 2018-5-29 17:19
标题: 轻松解决:接收base64上传图片出现错误“Base-64 字符数组或字符串的长度无效”
最近在做接口的时候,需要上传图片,就想着使用老方法,还是传入base64,然后进行接口处理上传图片,代码如下:

[C#] 纯文本查看 复制代码
int userId = InputHelper.GetInputInt(context.Request["userId"]);
                string multePic = InputHelper.GetInputString(context.Request["multePic"]);  //Base64
                string extend = InputHelper.GetInputString(context.Request["extend"]);      //后缀

                byte[] bytes = Convert.FromBase64String(multePic.ToString());
                Stream stream = new MemoryStream(bytes);



下面就是保存图片的代码,结果在执行的时候,执行到代码
[C#] 纯文本查看 复制代码
Convert.FromBase64String(multePic.ToString())
时,出现了错误,提示如下:
[XML] 纯文本查看 复制代码
Base-64 字符数组或字符串的长度无效



这时,就找了很多方法,查找了资料,基本上说的都是base64中有特殊字符,需要替换,就抱着试试的态度(毕竟我的base64是使用图片直接生成的,按说不应该有错的),对代码进行了如下的处理:
[C#] 纯文本查看 复制代码
                int userId = InputHelper.GetInputInt(context.Request["userId"]);
                string multePic = InputHelper.GetInputString(context.Request["multePic"]);  //Base64
                string extend = InputHelper.GetInputString(context.Request["extend"]);      //后缀


                string dummyData = multePic.Trim().Replace( "%", "" ).Replace( ",", "" ).Replace( " ", "+" );
                if ( dummyData.Length % 4 > 0 ) {
                    dummyData = dummyData.PadRight( dummyData.Length + 4 - dummyData.Length % 4, '=' );
                }
                byte[] bytes = Convert.FromBase64String( dummyData );

                //byte[] bytes = Convert.FromBase64String(multePic.ToString());
                Stream stream = new MemoryStream(bytes);


将base64中的特殊字符进行了过滤,其它不动,再次测试接口,噢耶,完美的保存成功。

作者: 范范    时间: 2018-5-29 17:20
测试使用的base64如下:
iVBORw0KGgoAAAANSUhEUgAAAC4AAAAXCAYAAAB0zH1SAAAAPUlEQVRYhe3OQQ0AIAwAsW0+EDAB+JcGHngcWXJV0Fy9TwxUvwOvjNOM04zTjNOM04zTjNOM04zTjNPGxi8WKgGos7gdzAAAAABJRU5ErkJggg==




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4