使用C#从blob数据Oracle播放视频

时间:2016-03-17 09:33:55

标签: c# winforms oracle11g blob

我使用c#winform创建了简单的项目将blob文件数据保存到oracle数据库中并且工作正常。现在,我想用c#播放来自blob oracle数据的视频,但我不能。这是我的代码:

if (koneksidb.con.State == ConnectionState.Open)
{
    koneksidb.con.Close();
}
koneksidb.con.Open();
OracleCommand cmd = new OracleCommand();
OracleDataReader dr;
cmd.CommandText = @"SELECT ID,FILENAME, FILEDATA, KETERANGAN, SUBSTR(FILENAME, -4)AS FILEEXTENTION FROM LATIHANFILEMANAGER WHERE ID = '1' AND ISPREVIEW = N'1'";
cmd.Connection = koneksidb.con;
dr = cmd.ExecuteReader();
while (dr.Read())
{
    string fileExtention = dr["FILEEXTENTION"].ToString(); //got file extention from database
    switch(fileExtention)
    {
        case ".pdf": //when blob is pdf file worked fine
            byte[] FileBytes = (byte[])dr["FILEDATA"];
            System.IO.MemoryStream stream = new System.IO.MemoryStream(FileBytes);
            fmPdfViewer f = new fmPdfViewer();
            f.pdfViewer1.LoadDocument(stream); //when file .pdf i can display preview using pdf viewer in devexpress
            f.Show();
            break;
        case ".mp4": //when blob is video
            string path = ""; //here the problem how can i play file video from blob oracle data
            fmVideoViewer vd = new fmVideoViewer();
            vd.axWindowsMediaPlayer1.URL = path;
            vd.axWindowsMediaPlayer1.settings.autoStart = true;
            vd.Show();
            break;
    }
}
dr.Close();

真的需要解决方案,谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将文件保存在磁盘上并播放。

byte[] bytes = (byte[])dr["FILEDATA"];    
string name = (string)dr["FILENAME"] + (string)dr["FILEEXTENTION"];    
var path = System.IO.Path.Combine(Application.StartupPath, name);
System.IO.File.WriteAllBytes(path , bytes);
this.axWindowsMediaPlayer1.URL = path;
this.axWindowsMediaPlayer1.Ctlcontrols.play();

您可以使用Application.StartupPath或您喜欢的任何其他路径来缓存文件。

过了一段时间,最好清理缓存的文件。