使用Video-js从数据库流式传输视频

时间:2015-04-04 21:39:10

标签: c# mysql asp.net blob video.js


我的ASP.NET Web应用程序从MySQL数据库中检索BLOB(图片和视频)并将其显示在库中。我可以使用WebHandler

显示图片
 public class imageHandler : IHttpHandler {

public void ProcessRequest (HttpContext context) {
    MySqlDataReader rdr = null;
    string myConnectionString = "SERVER=localhost;" +
                      "DATABASE=BASEone;" +
                      "UID=admin;" +
                      "PASSWORD=SavePassword123;";


    MySqlConnection conn = new MySqlConnection(myConnectionString );
    try
    {

        MySqlCommand cmd = new MySqlCommand
      ("select IMAGE from picture where id=" +
      context.Request.QueryString["imgid"], conn);
        conn.Open();
        rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            context.Response.ContentType = "image/jpg";
            context.Response.BinaryWrite((byte[])rdr["bild"]);

        }
        if (rdr != null)
            rdr.Close();
    }


该响应稍后用于ASP:Image Control,如下所示:

 <asp:Image ID="Image1" ImageUrl="imageHandler.ashx?imgid=150"  name="i1"  runat="server" />


我对视频文件使用了相同的方法,将 ContentType更改为视频/ MP4 并尝试将响应设置为来源:

<video id="vid1" class="video-js vjs-default-skin" controls  preload="none" width="640" height="264"
poster="images/img3.png" data-setup=''>
<source src="VideoHandler.ashx?imgid=2" type='video/mp4' />


它没有抛出任何异常,但视频仍未显示。也许是因为我使用 Video-js 来播放该文件。所以我认为不可能这样做。 我的另一种方法是在字节数组中创建一个临时文件夹中的新mp4文件,并在会话结束后将其删除。 我的代码如下所示:

    DataTable dt = new DataTable();
    MySqlDataAdapter sda = new MySqlDataAdapter();
    MySqlConnection myCon;
    DataSet datas = new DataSet();
    MySqlCommand mycmd = new MySqlCommand();

    string myConnectionString = "SERVER=localhost;" +
                  "DATABASE=BASEone;" +
                  "UID=admin;" +
                  "PASSWORD=SavePassword123;";

    myCon = new MySqlConnection(myConnectionString);
    selstring = "SELECT VID FROM video WHERE ID_VID=" +id;
    mycmd.CommandText = selstring ;
    cmd.CommandType = CommandType.Text;
    mycmd.Connection = con;
    con.Open();
    sda.SelectCommand = mycmd;
    sda.Fill(dt);
    if (dt != null)
    {

        Byte[] bytes = (Byte[])dt.Rows[0]["VID"];
        File.WriteAllBytes("../Temp/vid1.mp4",bytes);

    }
    con.Close();

此方法抛出 UnauthorizedAccessException 。所以我想知道,如果我必须事先创建文件。
我是ASP.NET的新手,一般编写Web应用程序,因此给您带来的不便表示歉意。我也很感激其他解决方案。

0 个答案:

没有答案