Oracle BLOB存储图片后读取多28字节,无法渲染问题求助
问题根源与解决方案
问题出在步骤6使用BinaryFormatter序列化查询结果——这会给原始图片字节数组添加.NET对象序列化的元数据(正是你看到的多出的28字节),导致图片数据被污染,无法正常渲染。
具体修正步骤
修正查询与字节数组转换逻辑
直接读取Oracle返回的BLOB数据为字节数组,完全不需要BinaryFormatter:var Isql = $"SELECT IMAGE_DATA FROM PAS_IMAGE_TEST WHERE PROD_DATE = TO_DATE('{ProdDate.ToString(common_database.CS_DATEFORMAT)}','{common_database.OR_DATEFORMAT}')"; using (var cmd = new OracleCommand(Isql, cn)) { var result = cmd.ExecuteScalar(); if (result is OracleBlob oracleBlob) { using (oracleBlob) { byte[] imageBytes = new byte[oracleBlob.Length]; oracleBlob.Read(imageBytes, 0, imageBytes.Length); return imageBytes; } } // 如果驱动直接返回字节数组,直接强转即可 else if (result is byte[] byteArray) { return byteArray; } else { throw new InvalidOperationException("无法读取有效图片数据"); } }移除步骤6的无效代码
直接使用上面返回的字节数组执行步骤7的Base64转换,无需额外序列化操作。
验证建议
- 对比插入前的原始字节数组长度,与读取后的字节数组长度,确认两者一致。
- 将读取后的字节数组写入本地文件,检查是否能正常打开,验证数据完整性。
内容的提问来源于stack exchange,提问作者carny666
相关产品推荐
相关产品推荐

