将base64字符串转换为文件而不保存在webapi中的磁盘上

时间:2018-06-14 22:28:29

标签: c#

我必须将base64字符串转换为文件,它可以是pdf,jpg,png,txt等任何东西而不保存在磁盘上。

我必须在webapi post方法中应用服务器端文件大小验证,并且我的post方法接收到代表任何格式文件的base64编码字符串,现在我必须从此base64字符串识别文件大小而不保存在磁盘上。

你能帮我解决一下这个问题。

1 个答案:

答案 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 == '=')); }