2013-03-30 67 views
0

我將圖像轉換爲客戶端上的字節數組在我的wp7應用程序,然後將其發送到 Web服務(服務器),代碼如下所示--->字節數組Base64String(圖像轉換)

客戶端

private void SendImage(byte[] data, long UserID) 
{ 
    Uri uri = new Uri("some uri"); 
    IDictionary<string, object> bytesToSend = new Dictionary<string, object>(); 
    bytesToSend.Add("ImageBytes", Convert.ToBase64String(data)); 
    PostClient post = new PostClient(bytesToSend); 
    post.DownloadStringAsync(uri); 
} 

服務器側

[HttpPost] 
public bool SaveImage(object ImageBytes, Int64 UserID = 1) 
{ 
    string ImgStr = ((string[])(ImageBytes))[0]; 
    byte[] ImgBytes = Convert.FromBase64String(ImgStr); ///<----///ERROR 
    Image ItemImage; 
    using (MemoryStream ms = new MemoryStream(ImgBytes)) 
    { 
     ItemImage = Image.FromStream(ms); 
    } 
    PostUserItems(ItemImage); 
    return true; 
} 

BU噸在接收端發生

無效長度爲一個基座64 char數組

+0

你確定發送了base64編碼嗎?看看ImgStr。 –

+0

ques編輯,仍然存在相同的問題 –

+0

不應該'行'字符串ImgStr =((字符串[])(ImageBytes))[0];'而不是'字符串ImgStr =(字符串)ImageBytes;'?我認爲那個瘋狂的演員就是這個問題。 –

回答

0

你的數據即將在作爲字符串,而不是字符串[]的誤差。您可以修復演員,所以不是

string ImgStr = ((string[])(ImageBytes))[0]; 

string ImgStr = (string)ImageBytes; 

如果可以,改變函數聲明,因爲你的函數需要一個String,而不是一個Object

public bool SaveImage(String ImgStr, Int64 UserID = 1) 
{ 
    byte[] ImgBytes = Convert.FromBase64String(ImgStr); 
    // ... 
} 
+0

我也是這麼做的,有什麼區別? –

+0

已在評論中更新 – bmm6o

-1

我見過引起並通過積極的內容過濾設備/防火牆(尤其是K-12教育機構打交道時),好戶型的視圖狀態的組合,這個錯誤。

我們通過在SQL Server中存儲Viewstate來解決這個問題。在走這條路線之前,我會建議試圖通過不存儲任何大的內容來限制viewstate的使用,並關閉所有不需要它的控件。

參考SQL Server中存儲的ViewState: MSDN - PageStatePersister ASP聯盟的概述 - 在SQL Server 代碼項目視圖狀態存儲簡單的方法 - ViewState的供應商模式

0

base64編碼字符串的長度始終是4的倍數。如果它不是4的倍數,那麼=字符會被追加,直到它爲止。當值包含= charaters時(其中一些將被刪除,我不記得確切的行爲),形式爲?name = value的查詢字符串有問題。在進行base64解碼之前,您可能能夠避開附加正確數量的=個字符。

編輯1

您可能會發現UserNameToVerify的價值已經有了「+」的修改爲「「的,所以你可能需要做一些事情,像這樣;

a = a.Replace(「」,「+」); 這應該得到正確的長度;

int mod4 = a。長度%4; 如果(MOD4> 0)

{

一個+ =新的字符串( '=',4 - MOD4);

}

過程調用以UrlEncode(如LukeH的答案)應使這一切毫無意義。