将base64字节转换为图像asp.net

pas*_*ash -4 vb.net asp.net

我试图将base64字节转换为图像.

这是我正在使用的代码:

    Private Function Base64ToImage(ByVal base64 As String) As System.Drawing.Image
    Dim img As System.Drawing.Image
    Dim ms As MemoryStream = New MemoryStream
    Dim b1 As String = base64.Replace("_", "/")
    Dim b2 As String = base64.Replace("-", "+")
    Dim b64 As String = b2.Replace(" ", "+")

    Dim bb As String = b64.Substring(0, b64.Length - 3)


    Dim b() As Byte
    b = Convert.FromBase64String(b64)
    ms = New System.IO.MemoryStream(b)
    img = System.Drawing.Image.FromStream(ms)

    Return img
End Function
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符.

问题出在哪儿 ??

Rob*_*III 5

对于那些不确定为什么要进行替换的人:我假设(这是... 的母亲)该字符串包含一些base64变体.

问题可能在于:

Dim b1 As String = base64.Replace("_", "/")
Dim b2 As String = base64.Replace("-", "+")
Dim b64 As String = b2.Replace(" ", "+")
Run Code Online (Sandbox Code Playgroud)

应该阅读(可能):

Dim b1 As String = base64.Replace("_", "/")
Dim b2 As String = b1.Replace("-", "+")
Dim b64 As String = b2.Replace(" ", "+")
Run Code Online (Sandbox Code Playgroud)

请注意以上2个片段中的第二行.

除了使用3个变量(或更多)并浪费大量内存之外,除了这些替换可能是不必要的,我会这样做:

base64 = base64.Replace("_", "/").Replace("-", "+").Replace(" ", "+")
Run Code Online (Sandbox Code Playgroud)

要么

base64 = base64.Replace("_", "/")
base64 = base64.Replace("-", "+")
base64 = base64.Replace(" ", "+")
Run Code Online (Sandbox Code Playgroud)

这样可以在内存中多次保存(一个"中间解码变量")base64字符串,并且在前2个片段中更容易弄乱变量.

我也觉得奇怪,这两个- are replaced with +所以有可能是太某处有一个错误.

  • 我不是你的兄弟,你*需要学习调试."问题仍然存在"哦,对.我们怎么知道你改变了什么以及如何改变?你可能至少**告诉我们:"*我改变了这个 - 但问题仍然存在*".Nooooo,你必须走"兄弟"之路.是的,我出去了.再见! (4认同)