簡體   English   中英

將AxaptaContainer轉換為Byte []或Base64

[英]Converting AxaptaContainer to either Byte[] or Base64

背景:我試圖在ASP.Net頁上顯示Ax2012數據庫中的圖像。

問題:圖像作為BLOB(或者說是Ax容器)存儲在Ax2012 DB中。 我必須將其在C#.Net Web服務(通過BusinessConnector連接)中轉換為Byte數組,甚至直接轉換為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 (或任何其他)表中:

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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM