C# winform 获取到的 blob 文件怎样直接预览??

将oracle查询出来的blob(doc,pdf,jpg)的数据预览出来,不下载到本机;附存入数据库的代码:
      string connStr ="user id=test;data source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PO    RT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)));password=test1;Persist Security Info=True;enlist=false;"
        OracleConnection conn = new OracleConnection(connStr);
        OracleCommand cmd = conn.CreateCommand();
        conn.Open();
            //读取文件
            FileStream fs = File.OpenRead(filePath);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            OracleParameter paramFileContent = cmd.CreateParameter();
            paramFileContent.OracleType = OracleType.Blob;
            paramFileContent.ParameterName = "FileContent";
            paramFileContent.Direction = ParameterDirection.Input;
            paramFileContent.Value = buffer;
            cmd.Parameters.Add(paramFileContent);
            string fileName = Path.GetFileNameWithoutExtension(filePath);//文件名
            //string fileExtension = Path.GetExtension(filePath).ToUpper().Split('.')[1];//拓展名
            string sqlStr = @"insert into test(id, file_name, file_mes) values (sys_guid(), fileName , :FileContent)";
            cmd.CommandText = sqlStr;
            cmd.CommandType = CommandType.Text;
            cmd.Connection = conn;
            result = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            conn.Close();
查询出来blob后直接转码乱码

byte[] b = (byte[])focusRow["FILE_MES"];
String Content = Encoding.UTF8.GetString(b);
String Content = Encoding.Unicod.GetString(b);
String Content = Encoding.Default.GetString(b);
如果直接保存( File.WriteAllBytes(@"" + downLoadUrl, byte[] b)没有问题。

从数据库查询出来后直接在PdfViewer 中显示出来文件信息,不需要保存到本机

首先要看你blob里存的到底是个什么东西呀
你存二进制文件那当然没问题,反正最后是对应的app去打开它
如果你想直接在内存里打开,那就得知道它到底是个什么格式,然后对应的方式打开
如果是个图片,你要转image然后显示在picturebox里,如果是富文本你需要放到richtextbox里,你无脑把什么都转字符串可不乱码吗

不用转换什么,你当时怎么写进去的,就怎么读出来

比如 using(filestream fs=new FileInfo("xxx.pdf").Crreate()) //当然我这里是写到文件,你写到内存stream一样
{
fs.write(你现在读出的byte[])
}

至于显示么,你需要去nuget 里去找一些viewer就好了
ps:好的viewer本身支持多种格式文件,当然这种viewer大多是商业的,免费的viewer大多只是单一的支持比如docviewer,pdfviewr
所以具体用什么viewer我们不多说了,你自己看情况办(嘿嘿,主意是看你公司愿意出多钱)

简单在nuget搜一下

你看viewer来了吧groupdview还成(不过我前面也说了,这块东西做的不错的都是商业的,这款也是商业的)
https://products.groupdocs.com/viewer/net/