求教,C#调用SAP(RFC),传递图片报错和失败

星先 2014-03-18 02:33:33
背景:弄个C#小程序,调用SAP的方法,向SAP传递一张图片,因服务器不让接收上传的文件,现只能将图片转成二进制,再传递给SAP。
SAP的function,接收图片的是个table,内含一列字段,该字段最多存储长度为1024。所以将图片转成的二进制数组拆成若干ROW,传进这个table,由SAP自行组成需要的图片。
出问题的代码:

Tables saptb = (Tables)ifunc.Tables;
Table tb1 = (Table)saptb.get_Item("itab");
byte[] image = SetImageToByteArray(ImgPath);//该方法是将指定路径的图片转换成二进制数组
byte[] imgbyte = new byte[1024];
int z = 1;
int y = 0;
tb1.AppendRow();

for (int i = 0; i < image.Length; i++)
{
imgbyte[y] = image[i];
if (y + 1 == 1024)
{
try
{
//tb1.set_Cell(z, "LINE", imgbyte); 这个写法报错
// tb1.set_Value(z, "LINE", imgbyte); 这个写法也报错
// tb1.AppendGridData(1, 1, 1, imgbyte); z一直是1,倒是可以传递进SAP,方法执行成功了,但是SAP收到图片后执行图片预览显示的时候,图片却是损坏的。
tb1.AppendGridData(z, 1, 1, imgbyte); //这个写法,第一行正常添加进table,但是z>1开始,就报错“Bad Index”
}
catch (Exception exx)
{

}
z++;
y = 0;
imgbyte = new byte[1024];
}
else
{
y++;
}
if (i == image.Length - 1 && image.Length % 1024 != 0)
{
//tb1.set_Cell(z, "LINE", imgbyte);
tb1.AppendGridData(z, 1, 1, imgbyte);
z++;
}
}

SAPFunctionsOCX.IParameter maktx = (SAPFunctionsOCX.IParameter)ifunc.get_Imports("RETURN");
//maktx.Value = "3";
ifunc.Call();
tB_CnnMsg.AppendText(maktx._Value.ToString() + '\n');
...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
星先 2014-03-19
  • 打赏
  • 举报
回复
求教求教。。。。
星先 2014-03-18
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
将图片转为字符串来进行保存
转成字符串,SAP怎么用啊
md5e 2014-03-18
  • 打赏
  • 举报
回复
将图片转为字符串来进行保存 /// <summary> /// 把 Base64 转图片 /// </summary> /// <param name="base64String"></param> public static MemoryStream Base64ToImage(string base64String) { // base64String.Substring(0, base64String.Length / 40 * 40) 主要是 Base64 編碼長度有規定必須是 0 或 4 的整數倍,所以為免出錯,把長度處理一下 byte[] imageBytes = Convert.FromBase64String(base64String); // byte[] imageBytes = Convert.FromBase64String(base64String.Substring(0,128)); MemoryStream _ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image _ms.Write(imageBytes, 0, imageBytes.Length); /* System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); image.Save(Server.MapPath("Report"), ImageFormat.Png); */ return _ms; } // 把图片转 Base64 编码 public static string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format) { using (MemoryStream ms = new MemoryStream()) { // Convert Image to byte[] image.Save(ms, format); byte[] imageBytes = ms.ToArray(); // Convert byte[] to Base64 String string base64String = Convert.ToBase64String(imageBytes); return base64String; } }

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧