我的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应用程序,因此给您带来的不便表示歉意。我也很感激其他解决方案。