Skip to content
Advertisement

coverting byte array from database to video file

my name is omer and im a student. my project is a website, in the websitye there is an ption that the user will upload a file. the websiteput it on the database and than show it but some why all i get from database is “System.Byte[]” insed of getting the video’s bytes. idk know what is wrong in my code. help pls.

My library “my video helper” code:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public class MyVideoHelper
{
    public MyVideoHelper()
    {

    }

    //הפונקציה מקבלת מסלול של קובץ ומחזירה את הקובץ מומר לבייטים
    public byte[] ConvertFileToByte(string location)
    {
        byte[] video = null;

        FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read);
        BinaryReader br = new BinaryReader(fs);
        int length = (int)(fs.Length);
        video = br.ReadBytes(length);

        return video;
    }

    //הפונקציה מקבלת קובץ תיקייה ושרת ושומרת את הקובץ בתיקייה
    //בשביל השרת פשוט תמיד תכתוב this
    public static string SaveFileInFoder(HttpPostedFile file, string folder, HttpServerUtility Server)
    {
        string location;

        if (file != null && file.ContentLength > 0)
        {
            location = Server.MapPath(folder) + "\" + System.IO.Path.GetFileName(file.FileName);

            try
            {
                file.SaveAs(location);
            }
            catch (Exception ex)
            {
                location = ex.Message;
            }
        }
        else
        {
            location = null;
        }

        return location;
    }
}

my c sharp code:

using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;

public partial class potg : System.Web.UI.Page
{
    public string username = "";
    public string span = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        string check = (string)(Session["loggedin"]);
        if (check == "true")
        {
            string id2 = (string)(Session["DataTable"]);
            int number = int.Parse(id2);
            string command2 = "SELECT username FROM users";
            DataTable table = MyAdoHelper.ExecuteDataTable("omerwatchdb.accdb", command2);
            int length = table.Rows.Count;
            string command3 = "SELECT profilePic FROM users";
            DataTable table2 = MyAdoHelper.ExecuteDataTable("omerwatchdb.accdb", command3);
            username = "<div id='sidebar'> username:" + table.Rows[number - 1]["username"] + "<img id='profilePicRight'src='profile/" + table2.Rows[number - 1]["profilePic"] + ".png'></div>";
            MyVideoHelper x = new MyVideoHelper();
            string path = "";

            if (Session["loggedIn"] != "true")
            {
                Response.Write("<script>alert('You Are not SignIN!');</script>");
                return;
            }
            if ((video2.PostedFile != null) && (video2.PostedFile.ContentLength > 0))
            {
                string hero3 = Request.Form["hero3"];
                path = MyVideoHelper.SaveFileInFoder(video2.PostedFile, "potg", Server);
                string command = "INSERT INTO videos (hero, file) VALUES( '" + hero3 + "','" + x.ConvertFileToByte(path) + "')";
                MyAdoHelper.DoQuery("omerwatchdb.accdb", command);
            }
        }
        string fileName = "omerwatchdb.accdb";
        string sql = "SELECT file,hero FROM VIDEOS";
        DataTable dt = MyAdoHelper.ExecuteDataTable(fileName, sql);
        int i = dt.Rows.Count;
        for (int c = 0; c < i; c++)
        {
            byte[] vid = (byte[])dt.Rows[c][0];
            string hero = (string)dt.Rows[c][1];
            string path3 = Server.MapPath("/potg") + "\" + hero +c+ ".mp4";
            string name = Path.GetFileName(path3);
            File.WriteAllBytes(path3, vid);
            span += "<li data-name='" + name + "' onclick='potgShow(this)'><a href='#'>KobiMarimi " + hero + " </a></li>";
        }



    }

}

my library “MyAdoHelper” code:

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;

/// <summary>
/// Summary description for MyAdoHelper
/// פעולות עזר לשימוש במסד נתונים מסוג אקסס
///  App_Data המסד ממוקם בתקיה 
/// </summary>

public class MyAdoHelper
{
    public MyAdoHelper()
    {
        //
        // TODO: Add constructor logic here
        //
    }


    public static OleDbConnection ConnectToDb(string fileName)
    {
        string path = HttpContext.Current.Server.MapPath("App_Data/");//מיקום מסד בפורוייקט
        path += fileName;
        //string path = HttpContext.Current.Server.MapPath("App_Data/" + fileName);//מאתר את מיקום מסד הנתונים מהשורש ועד התקייה בה ממוקם המסד
        string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" + path;//נתוני ההתחברות הכוללים מיקום וסוג המסד
        OleDbConnection conn = new OleDbConnection(connString);
        return conn;
    }

    /// <summary>
    /// To Execute update / insert / delete queries
    ///  הפעולה מקבלת שם קובץ ומשפט לביצוע ומבצעת את הפעולה על המסד
    /// </summary>

    public static void DoQuery(string fileName, string sql)//הפעולה מקבלת שם מסד נתונים ומחרוזת מחיקה/ הוספה/ עדכון
    //ומבצעת את הפקודה על המסד הפיזי
    {

        OleDbConnection conn = ConnectToDb(fileName);
        conn.Open();
        OleDbCommand com = new OleDbCommand(sql, conn);
        com.ExecuteNonQuery();
        com.Dispose();
        conn.Close();

    }

    /// <summary>
    /// To Execute update / insert / delete queries
    ///  הפעולה מקבלת שם קובץ ומשפט לביצוע ומחזירה את מספר השורות שהושפעו מביצוע הפעולה
    /// </summary>
    public int RowsAffected(string fileName, string sql)//הפעולה מקבלת מסלול מסד נתונים ופקודת עדכון
    //ומבצעת את הפקודה על המסד הפיזי
    {

        OleDbConnection conn = ConnectToDb(fileName);
        conn.Open();
        OleDbCommand com = new OleDbCommand(sql, conn);
        int rowsA = com.ExecuteNonQuery();
        conn.Close();
        return rowsA;
    }

    /// <summary>
    /// הפעולה מקבלת שם קובץ ומשפט לחיפוש ערך - מחזירה אמת אם הערך נמצא ושקר אחרת
    /// </summary>
    public static bool IsExist(string fileName, string sql)//הפעולה מקבלת שם קובץ ומשפט בחירת נתון ומחזירה אמת אם הנתונים קיימים ושקר אחרת
    {

        OleDbConnection conn = ConnectToDb(fileName);
        conn.Open();
        OleDbCommand com = new OleDbCommand(sql, conn);
        OleDbDataReader data = com.ExecuteReader();
        bool found;
        found = (bool)data.Read();// אם יש נתונים לקריאה יושם אמת אחרת שקר - הערך קיים במסד הנתונים
        conn.Close();
        return found;

    }
    //רועי

    public static DataTable ExecuteDataTable(string fileName, string sql)
    {
        OleDbConnection conn = ConnectToDb(fileName);
        conn.Open();
        OleDbDataAdapter tableAdapter = new OleDbDataAdapter(sql, conn);
        DataTable dt = new DataTable();
        tableAdapter.Fill(dt);
        return dt;
    }


    public void ExecuteNonQuery(string fileName, string sql)
    {
        OleDbConnection conn = ConnectToDb(fileName);
        conn.Open();
        OleDbCommand command = new OleDbCommand(sql, conn);
        command.ExecuteNonQuery();
        conn.Close();
    }

    public static string printDataTable(string fileName, string sql)//הפעולה מקבלת שם קובץ ומשפט בחירת נתון ומחזירה אמת אם הנתונים קיימים ושקר אחרת
    {


        DataTable dt = ExecuteDataTable(fileName, sql);

        string printStr = "<table border='1'>";

        foreach (DataRow row in dt.Rows)
        {
            printStr += "<tr>";
            foreach (object myItemArray in row.ItemArray)
            {

                printStr += "<td>" + myItemArray.ToString() + "</td>";
            }
            printStr += "</tr>";
        }
        printStr += "</table>";

        return printStr;
    }

}

Advertisement

Answer

Your insert statement:

string command = "INSERT INTO videos (hero, file) VALUES( '" + hero3 + "','" + x.ConvertFileToByte(path) + "')";

will end up as a SQL statement like this:

INSERT INTO videos (hero, file) VALUES ('Some Hero', 'System.Byte[]')

Because when you concat your byte array like this:

string byteArrayInConcat = "MY BYTES: " + x.ConvertFileToByte(path);

You get this:

MY BYTES: System.Byte[]

SOLUTION:

You should use parameterized queries, both for the sake of security and be able to write a byte[] into the database.

Add this method to your MyAdoHelper class. To be consistent, I am naming the variables as you did, which normally would not be my choice of naming.

    public static int ExecuteNonQuery(string fileName, string sql, Dictionary<string, object> parameters)
    {
        using (OleDbConnection conn = ConnectToDb(fileName))
        {
            conn.Open();
            using (OleDbCommand com = new OleDbCommand(sql, conn))
            {
                foreach (KeyValuePair<string, object> parameter in parameters)
                {
                    com.Parameters.AddWithValue(parameter.Key, parameter.Value);
                }
                return com.ExecuteNonQuery();
            }
        }
    }

Then, insert the video using the following code block:

        if ((video2.PostedFile != null) && (video2.PostedFile.ContentLength > 0))
        {
            string hero3 = Request.Form["hero3"];
            path = MyVideoHelper.SaveFileInFoder(video2.PostedFile, "potg", Server);

            string command = "INSERT INTO videos (hero, file) VALUES (?, ?)";

            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("@hero", hero3);
            parameters.Add("@file", x.ConvertFileToByte(path));

            MyAdoHelper.ExecuteNonQuery("omerwatchdb.accdb", command, parameters);
        }
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement