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

C# 在webapi中将base64字符串转换为文件而不保存在磁盘上,c#,C#,我必须将base64字符串转换为文件,它可以是任何东西,如pdf、jpg、png、txt等,而无需保存在磁盘上 我必须在webapi post方法中应用服务器端文件大小验证,并且我的post方法接收到表示任何格式文件的base64编码字符串,现在我必须从这个base64字符串中标识文件大小,而不保存在磁盘上 您能帮助我如何实现这一点吗。而转换.FromBase64String(base64).Length方法是有效的,如果您只想找到解码后的base64字节的长度,您可以轻松地计算它,而不需要对输

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

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


您能帮助我如何实现这一点吗。

转换.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;
}

文件只是写入磁盘的字节模式。在记忆中保留这种模式并不难。在你写完之前不要把它写下来。实际上,您经常需要流。还有一个类“MemoryStream”,它是一个流,但将所有数据保存在内存中。
Console.WriteLine($”{Convert.FromBase64String(“VGVzdGluZw=”).Length})
是一个简单的解决方案。您能提供一些相同的代码示例吗。
int DecodedLength(string base64)
{ return (base64.Count(ch => !char.IsWhiteSpace(ch)) / 4 * 3 - base64.Count(ch => ch == '=')); }