图片转二进制流存储到数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片转二进制流存储到数据库相关的知识,希望对你有一定的参考价值。

1.数据库名为Demo,数据结构如图

技术分享

2.后台代码如下

 class Program
    {
        public static readonly string conStr = "Data Source = .;Initial Catalog = Demo;Integrated Security = SSPI;";
        static void Main(string[] args)
        {
            #region 图片转为二进制流写进数据库
            byte[] buffer = ImageToByte(@"G:\2.jpg");
            if (PushDataBase(buffer) > 0)
            {
                Console.WriteLine("OK");
                Console.Read();
            }
            #endregion

            #region 二进制流转图片
            //byte[] gBuffer = GetDataBase(3);
            //ByteToImage(gBuffer);
            //Console.WriteLine("OK");
            //Console.Read();
            #endregion

        }

        /// <summary>
        /// 图片转二进制流
        /// </summary>
        /// <param name="imgPath">图片路径</param>
        /// <returns></returns>
        public static byte[] ImageToByte(string imgPath)
        {
            Image image = Image.FromFile(imgPath);
          
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, image.RawFormat);
                byte[] buffer = new byte[ms.Length];
                ms.Seek(0, SeekOrigin.Begin);
                ms.Read(buffer, 0, buffer.Length);
                return buffer;
            }
        }

        /// <summary>
        /// 字节流转图片
        /// </summary>
        /// <param name="buffer">图片二进制流</param>
        public static void ByteToImage(byte[] buffer)
        {
            MemoryStream ms = new MemoryStream();

            ms.Write(buffer, 0, buffer.Length);
            Image img = Image.FromStream(ms);
            string file = "mypicture2";
            if (img.RawFormat == ImageFormat.Jpeg)
            {
                file += ".jpg";

            }
            else if (img.RawFormat == ImageFormat.Png)
            {
                file += ".png";
            }
            else
            {
                file += ".jpg";
            }
            File.WriteAllBytes(file, buffer);
        }
        /// <summary>
        /// 写进数据库
        /// </summary>
        /// <param name="buffer">图片二进制流</param>
        /// <returns></returns>
        public static int PushDataBase(byte[] buffer)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                using (SqlCommand com = new SqlCommand())
                {
                    com.Connection = conn;
                    conn.Open();
                    com.CommandText = "insert into ImageData values(@image)";
                    com.Parameters.Add("@image", SqlDbType.Image).Value = buffer;
                    return com.ExecuteNonQuery();
                }
            }
        }
        /// <summary>
        /// 从数据库中读取
        /// </summary>
        /// <returns></returns>
        public static byte[] GetDataBase(int id)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                using (SqlCommand com = new SqlCommand())
                {
                    com.Connection = conn;
                    conn.Open();
                    com.CommandText = "select ImageByte from ImageData where [email protected]";
                    com.Parameters.Add("@id", SqlDbType.Int).Value = id;
                    using (SqlDataReader reader = com.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            return (byte[])reader[0];
                        }
                    }

                }
            }
            return null;
        }
    }

 

以上是关于图片转二进制流存储到数据库的主要内容,如果未能解决你的问题,请参考以下文章

java web二进制流的图片如何用response返回给前台

Java中如何把图片转换成二进制流

c# 图片转二进制流

使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)

Java 图片二进制数据转换成流输出请求解答

转载C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte