2013-03-30 68 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的答案)应使这一切毫无意义。