2015-07-28 76 views
1

背景:我試圖在ASP.Net頁面上顯示來自Ax2012數據庫的圖像。將AxaptaContainer轉換爲Byte []或Base64

問題:圖像存儲在Ax2012數據庫中作爲一個BLOB(或井,斧頭容器)。我必須在我的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") %>'/> 

我也試了一下強制轉換爲字符串,在這種情況下,我沒有得到任何異常拋出,也沒有圖像;)

有什麼建議嗎?

感謝

回答

2

你必須容器轉換成編碼的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; 
} 

然後調用背後的getImageAsBase64png.cs代碼:

axRecord.Call('getImageAsBase64png'); 
+0

謝謝馬捷,將會給它一試早上! –