2012-09-02 60 views
1

嘗試將base64字符串轉換爲字節數組時,出現異常。我將圖像轉換爲字節數組,然後轉換爲base64字符串,然後對其進行加密並將其存儲在文件中。然後我試圖將Base64字符串轉換回MemoryStream中的一個字節數組,並重新創建圖像。我在這裏得到一個出現FormatException:將Base64字符串轉換爲字節時的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

問題是你的字符串在線路某處損壞。這不是base64字符串,正如您可以通過第二個字符>所看到的那樣,這不會發生在base64字符串中。


備註:你的函數創建一個包含數據的內存流,然後再將數據寫入內存流。然後,您嘗試從內存流中讀取而不將位置重置到流的開頭。

只需創建內存流並從中讀取:

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

阿好,我想通了..我是存儲XML樣式文件中的Base64字符串,我加密。在我的代碼之間拉出XML標籤之間的數據,我沒有正確指定起始位置。這是拉動所有正確的數據,包括起始標籤的最後2個字符。在這種情況下,'G>'。謝謝您的幫助! – gwin003

相關問題