2009-12-01 37 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