将 AxaptaContainer 转换为 Byte[] 或 Base64
Converting AxaptaContainer to either Byte[] or Base64
背景: 我正在尝试在 ASP.Net 页面上显示来自 Ax2012 数据库的图像。
问题: 图像作为 BLOB(或者说是 Ax 容器)存储在 Ax2012 数据库中。我必须在我的 C#.Net 网络服务(通过 BusinessConnector 连接)中将其转换为字节数组,甚至直接转换为 Base64 字符串。
我做了什么:
使用下面的代码,我得到一个异常,即 imageObject 不可序列化。我在一定程度上理解这一点,但我还能怎么做呢?
隐藏代码:
while (axRecord.Found)
{
string workerRecId = axRecord.get_Field("WorkerRecId").ToString();
string name = axRecord.get_Field("Name").ToString();
string image;
using (MemoryStream ms = new MemoryStream())
{
AxaptaContainer imageObject = (AxaptaContainer)axRecord.get_Field("Image");
new BinaryFormatter().Serialize(ms, imageObject);
image = Convert.ToBase64String(ms.ToArray());
}
string wppServiceWarehouse = axRecord.get_Field("WPPServiceWarehouse").ToString();
dataTable.Rows.Add(new object[] { workerRecId, name, image, wppServiceWarehouse });
axRecord.Next();
}
ASP 页数:
<asp:Image id="employee_ProfilePhoto" runat="server" imageUrl='<%# "data:image/png;base64," + Eval("Image") %>'/>
我也试过将它转换为字符串,在这种情况下我没有抛出异常,但也没有图像 ;)
有什么建议吗?
谢谢
您必须将容器转换为 base64 编码的 PNG。
您可以将此方法添加到 HcmPersonImage
(或任何其他)table:
public str getImageAsBase64png()
{
Image imgObj;
BinData bd;
str result;
if (this.Image)
{
imgObj = new Image(this.Image);
imgObj.saveType(ImageSaveType::PNG);
bd = new BinData();
bd.setData(imgObj.getData());
result = bd.base64Encode();
}
else
{
result = "";
}
return result;
}
然后在后面的.cs
代码中调用getImageAsBase64png
:
axRecord.Call('getImageAsBase64png');
背景: 我正在尝试在 ASP.Net 页面上显示来自 Ax2012 数据库的图像。
问题: 图像作为 BLOB(或者说是 Ax 容器)存储在 Ax2012 数据库中。我必须在我的 C#.Net 网络服务(通过 BusinessConnector 连接)中将其转换为字节数组,甚至直接转换为 Base64 字符串。
我做了什么: 使用下面的代码,我得到一个异常,即 imageObject 不可序列化。我在一定程度上理解这一点,但我还能怎么做呢?
隐藏代码:
while (axRecord.Found)
{
string workerRecId = axRecord.get_Field("WorkerRecId").ToString();
string name = axRecord.get_Field("Name").ToString();
string image;
using (MemoryStream ms = new MemoryStream())
{
AxaptaContainer imageObject = (AxaptaContainer)axRecord.get_Field("Image");
new BinaryFormatter().Serialize(ms, imageObject);
image = Convert.ToBase64String(ms.ToArray());
}
string wppServiceWarehouse = axRecord.get_Field("WPPServiceWarehouse").ToString();
dataTable.Rows.Add(new object[] { workerRecId, name, image, wppServiceWarehouse });
axRecord.Next();
}
ASP 页数:
<asp:Image id="employee_ProfilePhoto" runat="server" imageUrl='<%# "data:image/png;base64," + Eval("Image") %>'/>
我也试过将它转换为字符串,在这种情况下我没有抛出异常,但也没有图像 ;)
有什么建议吗?
谢谢
您必须将容器转换为 base64 编码的 PNG。
您可以将此方法添加到 HcmPersonImage
(或任何其他)table:
public str getImageAsBase64png()
{
Image imgObj;
BinData bd;
str result;
if (this.Image)
{
imgObj = new Image(this.Image);
imgObj.saveType(ImageSaveType::PNG);
bd = new BinData();
bd.setData(imgObj.getData());
result = bd.base64Encode();
}
else
{
result = "";
}
return result;
}
然后在后面的.cs
代码中调用getImageAsBase64png
:
axRecord.Call('getImageAsBase64png');