2009-12-01 44 views
0

我有一個查詢從Oracle DB中檢索數據。我正在檢索的表包含一個BLOB類型的列。當我試圖輸出它爲在Coldfusion中顯示BLOB對象

<cfoutput>#query.blobColumn#</cfoutput> 

它給我的錯誤「ByteArray對象不能轉換爲字符串」。我嘗試使用

<cfoutput>#ToString(query.blobColumn)#</cfoutput> 

然後它工作,但我得到的內容爲「 t 」。

有什麼辦法可以顯示一些文本的blob(XML文件),如果用戶點擊它,我們可以顯示/下載它的全部內容?

這是我使用

<cfloop query="UpdateResult"> 
    <tr id="dataRow"> 
    <cfloop index="ColName" `list="#UpdateResult.ColumnList#"> 
     <cfif isBinary(UpdateResult[ColName[UpdateResult.CurrentRow])>     
     <td>#CharsetEncode(UpdateResult[ColName][UpdateResult.CurrentRow], "ISO- 8859-1") #</td> 
     <cfelse> 
      <td>#UpdateResult[ColName][UpdateResult.CurrentRow]#</td> 
     </cfif> 
     </cfloop> 
    </tr> 
</cfloop>` 
+0

字符是否出現在頁面上? – mwcz 2009-12-01 18:17:54

+0

是的,我顯示在表格格式我得到了這個輸出 – CFUser 2009-12-01 18:31:55

回答

2

您可以嘗試使用CharsetEncode()函數的代碼。

<cfoutput>#CharsetEncode(query.blobCoulmn, "us-ascii")#</cfoutput> 

從文檔:

Adob​​e建議您使用此功能 ,而不是的ToString 功能,將二進制數據轉換爲字符串 在所有新的應用程序。

它支持很多字符集,us-ascii僅作爲示例使用。希望這可以幫助!

+0

好吧,我正在使用一個通用的代碼來顯示所有的blob類型和字符串類型使用cfloop。 當我得到不是BLOB類型的列然後得到「CharsetEncode函數的參數1,現在是'',必須是一個有效的二進制對象' 因此,無論如何,我們可以確定它是哪種類型,是否它只有BLOB類型,我們將使用CharsetEncode()? – CFUser 2009-12-01 20:33:02

+0

我認爲你不能把它們稱爲「query.blobColumn」,「query.stringColumn」等?沒有看到代碼,我可以提供的最好的是'isBinary()'函數。它可能會做你在問什麼。 – mwcz 2009-12-01 20:53:39

+0

感謝mwc,它工作正常 – CFUser 2009-12-01 21:20:40

2

如果BLOB是二進制數據,則將其顯示爲字符串將不起作用。研究使用CFCONTENT以二進制格式傳送數據。爲了使最終用戶能夠正確接收,您可能需要指定適當的MIME類型。

+0

喜奔,我BLOB是一個XML數據 – CFUser 2009-12-01 23:48:18

+2

雖然你可以使用BLOB的XML(哎!寄託都爲二進制!)大多數人會使用一個XMLTEXT,文字,NTEXT,CLOB,或類似的領域。 BLOB代表二進制長對象。 – 2009-12-02 01:28:45

+0

我當然會使用CLOB來處理XML數據。 – ale 2009-12-02 14:19:47