我必须将base64字符串转换为文件,它可以是pdf,jpg,png,txt等任何东西而不保存在磁盘上。
我必须在webapi post方法中应用服务器端文件大小验证,并且我的post方法接收到代表任何格式文件的base64编码字符串,现在我必须从此base64字符串识别文件大小而不保存在磁盘上。
你能帮我解决一下这个问题。
答案 0 :(得分:1)
虽然Convert.FromBase64String(base64).Length
方法有效,但如果你只是想找到解码后的Base64字节的长度,你可以轻松地计算它,而不需要解码输入,从而节省内存。
通常,4个Base64字符转换为3个字节。如果字节数不能被3'='整除,则字符用作填充以获得完整的4字符块。在解码期间,也会忽略空格。
int DecodedLength(string base64)
{
var chars = 0;
var padding = 0;
for (int i = 0; i < base64.Length; i++)
{
var ch = base64[i];
if (!char.IsWhiteSpace(ch)) { chars++; }
if (ch == '=') { padding++; }
}
return chars / 4 * 3 - padding;
}
或者如果你想要一个LINQ oneliner,但是它的性能稍差,因为它在输入上迭代两次并依赖于枚举器调用:
int DecodedLength(string base64)
{ return (base64.Count(ch => !char.IsWhiteSpace(ch)) / 4 * 3 - base64.Count(ch => ch == '=')); }