我正在开发一个通过网站接收Base64文件的C#客户端。
它有时会起作用,但现在我有一个不起作用的文件,因为:
让我说我把它作为一个Base64字符串,在开头添加了一些额外的信息 shapered.png | data:image / png; base64,iVBORw0KGgoAAAANSUh /// EUgAAACAAAAAgCAYAblabla
然后我在C#代码中执行此操作:
var raw = base64.Split('/')[1]; //get raw data with type extention ,
var data = raw.Split(',')[1]; //get base64 data
var info = raw.Split(',')[0]; // gets type extention mp3 base64
var ext = info.Split(';')[0]; // splits header mp3 only use this for comparison against malicous file
var name = base64.Split('|')[0]; //splits name info
现在我在调试器中看到它在 ///
之后删除了所有信息我完全忽略了这一点吗? 我认为var raw = base64.Split('/')[1]会在日期之后获取信息:image / 然后那个raw.Split(',')[1]取出png; base64只留下原始数据。
但事实并非如此,它还会在原始变量中的'/'之后取出所有其余部分,从而导致文件损坏。
为什么我没有将它拆分为','立即与之分开,以防止带有','的文件也能正常工作。
它完全飞到了我的头上,对不起伙计们! 我以某种方式认为,[1]它还会占用“数组”的其余部分。
string example = "im/noob/programmer";
Console.WriteLine(example);
string lol = example.Split('/')[1]; //this only outputs "noob"
Console.WriteLine(lol);
答案 0 :(得分:2)
你正在将整个弦乐切成碎片。您使用/
进行拆分,并在每次出现/
时断开字符串。
更好的解决方案是找到斜线的位置而不是分裂斜杠。
这样的事情:
string s1 = "shapered.png|data:image/png;base64,iVBORw0KGgoAAAANSUh /// EUgAAACAAAAAgCAYAblabla";
string name = s1.Substring(0, s1.IndexOf('|'));
string data = s1.Substring(s1.IndexOf('|') + 1);
string mimeType = data.Substring(data.IndexOf(':') + 1, data.IndexOf(';') - data.IndexOf(':') - 1);
string base64 = data.Substring(data.IndexOf(',') + 1);
或者当您习惯使用正则表达式时:
(.*?)\|data:(.*?);base64,(.*)