将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)没有问题。