最近在做接口的时候,需要上传图片,就想着使用老方法,还是传入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中的特殊字符进行了过滤,其它不动,再次测试接口,噢耶,完美的保存成功。
|