読み込み画像をデータベースに保存する方法のまとめ


1.まずはデータテーブルSaveImageTestを作成します。
ImageID:uniqueidentifer    メインキー
ImageType:varrhar(32)    画像の種類
ImageName:varhar(128)   画像の名前
ImageContent:image  画像の内容
ImageUrl:varrhar(128)ピクチャ格納経路
 
2.画像をデータベースに保存する
 
2.1バイトストリームを使用してアップロード画像の内容を取得する
 
 #region          :    ,              

                //     
                imgStream.Read(imageContent, 0, imageSize);
                imgStream.Close();

                #endregion
2.2アップロードファイルコントロールのGetByte属性を使って画像の内容を取得する
#region        :                        
 
                imageContent = fupLoadImage.FileBytes;

                #endregion
 
3.データベースから画像の内容を読み取り、ページに表示する
3.1ストリームを読み取り、現在のページに直接表示する
/// <summary>
    ///       1,           ,             
    /// </summary>
    private void ReadImage()
    {

        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' ");

        SqlDataReader sqlRead = kpSql.ReadStu(sql, false);

        while (sqlRead.Read())
        {
            Response.ContentType = sqlRead["ImageType"].ToString();
            Response.BinaryWrite((byte[])sqlRead["ImageContent"]);

        }
        kpSql.CloseConn();

    }
3.2イメージをImageコントロールで表示する
画像を柔軟に展示するために、実際の需要を満たすために、新しいページを追加して、画像を読み取り、ページのImageコントロールのImageUrlにパスを付与すればいいです。
  /// <summary>
    ///           
    ///            image     ,              , image   url    
    /// </summary>
    private void ReadImage2()
    {
        this.imgReadImage.ImageUrl = "OutPutImage.aspx";
    }
 
4.パスを利用して画像の保存と読み込みを実現する
実際の使用では、ハードディスクコントロールがサーバの中で使用されることが多いです。画像を直接利用する経路で記憶と読み取りを実現することができます。これはデータベース空間を節約するだけでなく、頻繁にメモリ操作を読み取りやすく、より安全です。
4.1経路を利用して写真を保存する
#region     :             

                //            Server.MapPath()
                //if (!Directory.Exists(Server.MapPath("E:\\  \\ImageStorgeTest\\")))
                if (!Directory.Exists("E:\\  \\ImageStorgeTest\\"))
                {
                    //             
                    Directory.CreateDirectory("E:\\  \\ImageStorgeTest\\");
                    //       ,       ,   
                    if (Directory.Exists("E:\\  \\ImageStorgeTest\\" + imageName))
                    {
                       imageUrl=imageUrlBase+Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName)+"  "+Path.GetExtension(fupLoadImage.PostedFile.FileName);
                       
                    }
                }
                fupLoadImage.PostedFile.SaveAs(imageUrl);
                #endregion
4.2経路を利用して画像を読み取る
フロントコントロールの定義:
<td colspan="4">
                   :
                <img id="imgReadImageByUrl" runat="server" alt=""  width="100" height="150" />
            </td>

 
 /// <summary>
    ///          ,   Img        
    /// </summary>
    private void ReadImage4()
    {
        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' ");
      DataTable dt=  kpSql.ExceTable(sql, "SaveImageTest");
      if (dt.Rows.Count > 0)
      {
          this.imgReadImageByUrl.Src = @"E:\\  \\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString();
      }
    }

 
添付:全部のコードは以下の通りです。
 
 #region     
    /// <summary>
    ///              
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSelectImage_Click(object sender, EventArgs e)
    {
        //          
        bool flag = false;
        if (fupLoadImage.HasFile)
        {
            //       
            string fileExtension = Path.GetExtension(fupLoadImage.FileName).ToUpper();
            string[] allowExtension = { ".JPG", ".GIF", ".PNG" };
            for (int i = 0; i < allowExtension.Length; i++)
            {
                if (allowExtension[i].Equals(fileExtension))
                {
                    flag = true;
                    break;
                }
            }
            //    ,    
            if (flag)
            {
                string sqlStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
                SqlConnection sqlConn = new SqlConnection(sqlStr);

                //       
                int imageSize = fupLoadImage.PostedFile.ContentLength;
                string imaType = fupLoadImage.PostedFile.ContentType;
                Stream imgStream = fupLoadImage.PostedFile.InputStream;
                //fupLoadImage.PostedFile.FileName         
                string imageName = Path.GetFileName(fupLoadImage.PostedFile.FileName);
                string imageUrlBase = "E:\\  \\ImageStorgeTest\\";
                string imageUrl = imageUrlBase + imageName;
                byte[] imageContent = new byte[imageSize];


                #region          :    ,              

                //     
                imgStream.Read(imageContent, 0, imageSize);
                imgStream.Close();

                #endregion

                #region        :                        

                imageContent = fupLoadImage.FileBytes;

                #endregion

                #region     :             

                //            Server.MapPath()
                //if (!Directory.Exists(Server.MapPath("E:\\  \\ImageStorgeTest\\")))
                if (!Directory.Exists("E:\\  \\ImageStorgeTest\\"))
                {
                    //             
                    Directory.CreateDirectory("E:\\  \\ImageStorgeTest\\");
                    //       ,       ,   
                    if (Directory.Exists("E:\\  \\ImageStorgeTest\\" + imageName))
                    {
                        imageUrl = imageUrlBase + Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName) + "  " + Path.GetExtension(fupLoadImage.PostedFile.FileName);

                    }
                }
                fupLoadImage.PostedFile.SaveAs(imageUrl);
                #endregion
                string sql = @"INSERT INTO SaveImageTest(ImageID,ImageType,ImageName,ImageContent,ImageUrl)
                        VALUES(NEWID(),@imaType,@imageName,@imageContent,@imageUrl)";
                SqlCommand comm = new SqlCommand(sql, sqlConn);

                SqlParameter paramImageType = new SqlParameter("@imaType", SqlDbType.VarChar, 50);
                paramImageType.Value = imaType;
                comm.Parameters.Add(paramImageType);

                SqlParameter paramImageName = new SqlParameter("@imageName", SqlDbType.VarChar, 64);
                paramImageName.Value = imageName;
                comm.Parameters.Add(paramImageName);

                SqlParameter paramImageContent = new SqlParameter("@imageContent", SqlDbType.Image);
                paramImageContent.Value = imageContent;
                comm.Parameters.Add(paramImageContent);

                SqlParameter paramImageUrl = new SqlParameter("@imageUrl", SqlDbType.VarChar, 128);
                paramImageUrl.Value = imageUrl;
                comm.Parameters.Add(paramImageUrl);

                sqlConn.Open();
                int numRowsAffected = comm.ExecuteNonQuery();
                sqlConn.Close();
            }

        }
    }

    #endregion

    #region        

    /// <summary>
    ///       1,           ,             
    /// </summary>
    private void ReadImage()
    {

        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' ");

        SqlDataReader sqlRead = kpSql.ReadStu(sql, false);

        while (sqlRead.Read())
        {
            Response.ContentType = sqlRead["ImageType"].ToString();
            Response.BinaryWrite((byte[])sqlRead["ImageContent"]);

        }
        kpSql.CloseConn();

    }

    /// <summary>
    ///           
    ///            image     ,              , image   url    
    /// </summary>
    private void ReadImage2()
    {
        this.imgReadImage.ImageUrl = "OutPutImage.aspx";
    }

    private void ReadImage3()
    {
        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846'");
        DataTable dt = kpSql.ExceTable(sql, "SaveImageTest");

        byte[] img = (byte[])dt.Rows[0]["ImageContent"];
        kpSql.CloseConn();
        MemoryStream ms = new MemoryStream(img, 0, img.Length);
        PictureBox picture1 = new PictureBox();
        picture1.Top = 160;
        picture1.Left = 200;
        picture1.Image = Image.FromStream(ms);

    }

    /// <summary>
    ///          ,   Img        
    /// </summary>
    private void ReadImage4()
    {
        string sql = string.Format("SELECT  * FROM  SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' ");
        DataTable dt = kpSql.ExceTable(sql, "SaveImageTest");
        if (dt.Rows.Count > 0)
        {
            this.imgReadImageByUrl.Src = @"E:\\  \\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString();
        }
    }


    #endregion