将Base64字符串转换为字节时的FormatException

时间:2012-09-02 00:47:44

标签: c# bytearray base64 formatexception

尝试将base64字符串转换为字节数组时出现异常。我正在将Image转换为字节数组,然后转换为base64字符串,然后加密并将其存储在文件中。然后我试图将base64字符串转换回MemoryStream中的字节数组,并重新创建图像。我在这里得到一个FormatException:

byte[] imgBytes = Convert.FromBase64String(str);

以下是两个主要功能的完整代码:

public string ImageToString(Image img)
{
     using (MemoryStream ms = new MemoryStream())
     {
          img.Save(ms, ImageFormat.Jpeg);

          return Convert.ToBase64String(ms.ToArray());
     }
}

public Image StringToImage(String str)
{            
     int lent = str.Length;
     byte[] imgBytes = Convert.FromBase64String(str);
     MemoryStream ms = new MemoryStream(imgBytes, 0, imgBytes.Length);

     ms.Write(imgBytes, 0, imgBytes.Length);
     return Image.FromStream(ms, true);
}

这是我试图转换的base64字符串的开头和结尾....     G>/9j/4AAQSkZJRgABAQEAYABgAAD .... Uh+8fxpT/B9KAP/2Q==

非常感谢任何想法!

1 个答案:

答案 0 :(得分:1)

问题是你的字符串在某个地方被破坏了。这不是base64字符串,正如第二个字符>所示,它不会出现在base64字符串中。


旁注:您的函数会创建包含数据的内存流,然后再将数据写入内存流。然后,您尝试从内存流中读取而不将位置重置为流的开头。

只需创建内存流并从中读取:

public Image StringToImage(String str) {            
  byte[] imgBytes = Convert.FromBase64String(str);
  return Image.FromStream(new MemoryStream(imgBytes), true);
}