我有一个Web应用程序,在oracle10g中有一个表具有以下结构:
Column Name DataType
UserImage long
我的问题是我应该如何在我的aspx页面上显示以长格式存储的IMAGE?
如果数据类型是BLOB或CLOB,那么它可能更容易,但它存储的时间很长。
我无法更改数据类型,因为这是第三方数据库。
请建议我如何实现这一目标。解决方案可能是使用Oracle或C#,我对两者都很好。
提前致谢。
答案 0 :(得分:1)
您无法以'long'数据类型存储图像。
相反 - 保持键值对的静态列表,每对定义图像的索引(例如,从1到n) 并且该值包含Image的文件名。
例如,以下伪代码演示了一种类似的方法(应该在应用程序的客户端/服务器端实现,而不是在数据库中实现
SWITCH (USERIMAGE)
CASE 1:
SETIMAGE("IMAGES/IMAGE_NUMBER_ONE.JPG");
BREAK:
CASE 2:
SETIMAGE("IMAGES/IMAGE_NUMBER_TWO.JPG");
BREAK:
等等。
另一种解决方案:
假设您的第一个表名为“Table1”。在数据库中创建一个名为my_images的新表
Column name Column type Comments
UserImage LONG Foreign key to Table1.UserImage
ImageData BLOB
和
SELECT t1.ImageData FROM Table1 t1, my_images mi
WHERE t1.UserImage == mi.UserImage;
答案 1 :(得分:0)
您发布的“块”字符似乎是TIFF图像。这给出了如何存储图像的想法。实际上,二进制图像数据似乎存储为字符数据。这当然完全没有支持,而且非常脆弱。我建议尽快转换它。
与此同时,我可以提出两种检索数据的方法,因此无法保证其中任何一种方法都有效。
但是方法容易受到字符集的影响:如果涉及两个或多个字符集,您的数据将被转换并因此被破坏。并且两者都容易受到某些数据类型的最大长度的影响。
方法1:
尝试通过RAW数据类型并将其作为字节数组检索。它当然限于32,000个字符,甚至可能更少。
SELECT UTL_RAW.CAST_TO_RAW(UserImage) FROM UNNAMED_TABLE WHERE ...
在C#方面,您应该获得OracleBinary或byte[]
个实例。
方法2:
尝试将其作为字符串检索。然后使用原始编码(Encoding.GetBytes将字符串转换为字节数组。运气不错,原始数据可以恢复。