簡體   English   中英

字節數組到Base64String(圖像轉換)

[英]byte array to Base64String (image conversion)

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

客戶端

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;
}

但在接收端發生錯誤

基本64個字符的數組的無效長度

您的數據以String而不是String []的形式輸入。 您可以修復演員表,而不是

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

string ImgStr = (string)ImageBytes;

如果可以,請更改函數聲明,因為函數需要String而不是Object

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

base64編碼的字符串的長度始終為4的倍數。如果不是4的倍數,則將=字符附加到該長度為止。 當值包含=字符時,形式為?name = value的查詢字符串會出現問題(某些字符將被刪除,我不記得確切的行為)。 在執行base64解碼之前,您也許可以添加正確數量的=字符。

編輯1

您可能會發現UserNameToVerify的值已將“ +”更改為“”,因此您可能需要執行類似的操作;

a = a.Replace(“”,“ +”); 這應該使長度正確;

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

{

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

}

當然,調用UrlEncode(如LukeH的回答)應該可以解決所有這些問題。

我已經看到了這種錯誤,這是由於尺寸較大的視圖狀態和過分的內容過濾設備/防火牆(特別是與K-12教育機構打交道)相結合而引起的。

我們通過將Viewstate存儲在SQL Server中來解決此問題。 在走那條路線之前,我建議嘗試通過不存儲任何較大的視圖狀態並為不需要它的所有控件將其關閉來限制您對視圖狀態的使用。

在SQL Server中存儲ViewState的參考:MSDN-PageStatePersister ASP Alliance概述-在SQL Server代碼項目中存儲ViewState的簡單方法-ViewState提供程序模型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM