You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle BLOB存储图片后读取多28字节,无法渲染问题求助

问题根源与解决方案

问题出在步骤6使用BinaryFormatter序列化查询结果——这会给原始图片字节数组添加.NET对象序列化的元数据(正是你看到的多出的28字节),导致图片数据被污染,无法正常渲染。

具体修正步骤

  1. 修正查询与字节数组转换逻辑
    直接读取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("无法读取有效图片数据");
        }
    }
    
  2. 移除步骤6的无效代码
    直接使用上面返回的字节数组执行步骤7的Base64转换,无需额外序列化操作。

验证建议

  • 对比插入前的原始字节数组长度,与读取后的字节数组长度,确认两者一致。
  • 将读取后的字节数组写入本地文件,检查是否能正常打开,验证数据完整性。

内容的提问来源于stack exchange,提问作者carny666

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:36:20