字节数组到Base64String(图像转换)

本文关键字:图像 转换 Base64String 字节数 数组 字节 | 更新日期: 2023-09-27 18:06:41

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

但接收端出现错误

base64字符数组的无效长度

字节数组到Base64String(图像转换)

您的数据将作为字符串传入,而不是字符串[]。你可以修改强制类型转换,所以不用

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.Length % 4;If (mod4> 0)

{

a += new string('=', 4 - mod4);

}

当然,调用UrlEncode(如LukeH的回答)应该使这一切都没有意义。

我看到过这个错误是由大尺寸的视图状态和过度激进的内容过滤设备/防火墙(特别是在处理K-12教育机构时)引起的。

我们通过在SQL Server中存储Viewstate来解决这个问题。在走这条路之前,我建议尽量限制你对viewstate的使用,不要在其中存储任何大的东西,并关闭所有不需要它的控件。

在SQL Server中存储ViewState的引用:PageStatePersister概述在SQL Server中存储视图状态的简单方法代码项目- ViewState Provider Model