C#调用java WebService传递图片

      使用C#调用Java的WebService用来传递图片,图片保存在MySql数据库中,采用MediumBlob类型(因为Blob类型最大为65K,我们的图片为4M,所以采用MediumBlod类型,最大支持16M),在实体类中采用的是byte[]数组。

       开始时,图片没有做任何处理,从数据库中取出图片,放到byte数组中,然后通过JsonObject将byte[]数组进行序列化为json格式的字符串,将数据发送出去,结果在Java测试完全正确,当C#进行调用时,无法将byte数组转换为C#的byte数组。通过查找资料,原因如下:在java中,byte是有符号的,范围为-128~127,而C#中byte是无符号的,范围为0~255,所以将java的byte转换为C#中的byte时会出现问题,结果不正确。解决方法,将java中的byte数组转换为int数组,然后将int数组进行序列化,C#调用时,先解析为string字符串,再将该字符串转换为int类型的数组,最后转换为byte类型的数组,成图。

      java端的代码如下,将byte数组转换为int数组:      

// 从实体中获取byte数组
byte[] bytes = obj.getPic();
// 声明int类型数组
int[] data = new int[bytes.length];
// 将byte数组转换为int数组
for (int i=0; i<bytes.length; i++) {
    data[i] = bytes[i] & 0xff;
}
// 序列化byte数组
JSONObject.fromObject(data).toString();
    c#端调用代码,1)解析为string字符串 2)将字符串转换为int类型的数组3)将int类型的数组转换为byte类型的数组4)调用方法,生成图片    

// 得到数组
Array tArr=tJObject["picture"].ToArray();
// 声明byte数组
Byte[] tByte = new Byte[tArr.Length];
// 将数组转换为int类型的数组,再转换为byte类型的数组
if (tArr != null && tArr.Length > 0)
{
     for (int i = 0; i < tArr.Length; i++)
     {
          tByte[i] = (byte)int.Parse(tArr.GetValue(i).ToString());
      }
}
// 赋值
byte[] imageBytes = tByte;
// 声明图片生成路径
tEcgTemplate.Picture = Properties.Settings.Default.FilePath + tEcgTemplate.Id + "_" + tEcgTemplate.MemberId + ".jpg";
// 生成图片
System.IO.File.WriteAllBytes(tEcgTemplate.Picture, imageBytes);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值