Friday, October 18, 2019

Asp.net-ல் இமேஜை டேட்டாபேஸில் ஸ்டோர் செய்தலும் ரீட்ரைவ் செய்தலும்.



முதலில் ஒரு Asp.net application உருவாக்கி அதில் form1 என்பதில் பின் வருமாறு ஒரு file upload control ஒன்றும் button ஒன்றும் உருவாக்கிக் கொள்வோம்.
File upload control என்பதன் இமேஜ் ஃபைலை தேர்ந்தெடுத்துக் கொள்ளவும். இப்பொழுடு upload பட்டனை கிளிக் செய்தால் இமேஜ் ஆனது டேட்டா பேஸில் ஸ்டோர் ஆக வேண்டும். கீழே உள்ள லேபிளில் upload success என்றும் view upload image என்ற ஹைபர் லிங்கும் உருவாக வேண்டும். அந்த லிங்கை கிளிக் செய்தால் இமேஜ் ஆனது டவுன் லோட் செய்யப்பட்டு காட்சிபடுத்தல் வேண்டும்.
முதலில் sql server-ல் SampleDB என்றொரு டேட்டாபேஸ் உருவாக்கிக்க் கொள்ளவும். அதில் பின் வருமாறு டேபிள் ஒன்று உருவாக்கவும்.
Create table tblImages
(
    Id int primary key identity,
    Name nvarchar(255),
    Size int,
    ImageData varbinary(max)
)
Go

இதில் id என்பது பிரைமரி கீ மற்றும் ஆட்டோ இன்கிரிமென்ட் ஃபீல்டு ஆகும்.
Name என்பது இமேஜின் பெயர். Size என்பது அதன் அளவு ஆகும். ImageData என்பது இமேஜ் ஆகும் . இதன் டேட்டா டைப் varbinary(max) ஆகும்.
இப்பொழுது கீழே உள்ளவாறு இமேஜை ஸ்டோர் செய்ய ஸ்டோர்டு ப்ரசிசர் ஒன்று உருவாக்கிக் கொள்ளவும்.
Create procedure spUploadImage
@Name nvarchar(255),
@Size int,
@ImageData varbinary(max),
@NewId int output
as
Begin
    Insert into tblImages
    values (@Name, @Size, @ImageData)

    Select @NewId = SCOPE_IDENTITY()
End
Go
இதில் spUploadImage  என்பது ப்ரசிசரின் பெயர்.
@Name ,@size,@ImageData என்பவை உள்ளீட்டு பாராமீட்டர்கள்.@NewId என்பது output பாராமீட்டர் ஆகும்.
SCOPE_IDENTITY என்பது கடைசியாக அப்லோட் செய்யப்பட்ட டேட்டானின் ஐடியை ரிடர்ன் செய்கின்றது.
டிசனிங்க் பின் வருமாறு செய்து கொள்ளவும்.
<asp:FileUpload ID="FileUpload1" runat="server" />
<br /><br />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<br /><br />
<asp:Label ID="lblMessage" runat="server"></asp:Label>
<br /><br />
<asp:HyperLink ID="hyperlink" runat="server">View Uploaded Image</asp:HyperLink>
இப்பொழுது web.config சென்று ஒரு DBCS என்ற பெயரில் கனக்சன் ஸ்ட்ரிங்க் ஒன்று உருவாக்கிக் கொள்ளவும். இது SampleDB என்ற டேட்டாபேஸுடன் கனக்சன் ஏற்படுத்த உதவுகின்றது.
<add name="DBCS"
  connectionString="server=.;database=SampleDB;integrated security=SSPI"/>
இதில் integrated security=SSPI என்பது டேட்டா பேஸ் உடன் கனக்ட் செய்ய தனியாக பயனர் பெயர், கடவுச்சொல் தேவையில்லை . விண்டோஸ் அதண்டிகேசனே போதும் என்பதைக் குறிக்கின்றது.
இப்பொழுது WebForm1.aspx.cs சென்று பின் வரும் நிரல் வரிகளை எழுதவும்.
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;

namespace Demo
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblMessage.Visible = false;
                hyperlink.Visible = false;
            }
        }

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            HttpPostedFile postedFile = FileUpload1.PostedFile;
            string filename = Path.GetFileName(postedFile.FileName);
            string fileExtension = Path.GetExtension(filename);
            int fileSize = postedFile.ContentLength;

            if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".gif"
                || fileExtension.ToLower() == ".png" || fileExtension.ToLower() == ".bmp")
            {
                Stream stream = postedFile.InputStream;
                BinaryReader binaryReader = new BinaryReader(stream);
                Byte[] bytes = binaryReader.ReadBytes((int)stream.Length);


                string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
                using (SqlConnection con = new SqlConnection(cs))
                {
                    SqlCommand cmd = new SqlCommand("spUploadImage", con);
                    cmd.CommandType = CommandType.StoredProcedure;

                    SqlParameter paramName = new SqlParameter()
                    {
                        ParameterName = @"Name",
                        Value = filename
                    };
                    cmd.Parameters.Add(paramName);

                    SqlParameter paramSize = new SqlParameter()
                    {
                        ParameterName = "@Size",
                        Value = fileSize
                    };
                    cmd.Parameters.Add(paramSize);

                    SqlParameter paramImageData = new SqlParameter()
                    {
                        ParameterName = "@ImageData",
                        Value = bytes
                    };
                    cmd.Parameters.Add(paramImageData);

                    SqlParameter paramNewId = new SqlParameter()
                    {
                        ParameterName = "@NewId",
                        Value = -1,
                        Direction = ParameterDirection.Output
                    };
                    cmd.Parameters.Add(paramNewId);

                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();

                    lblMessage.Visible = true;
                    lblMessage.ForeColor = System.Drawing.Color.Green;
                    lblMessage.Text = "Upload Successful";
                    hyperlink.Visible = true;
                    hyperlink.NavigateUrl = "~/WebForm2.aspx?Id=" +
                        cmd.Parameters["@NewId"].Value.ToString();
                }
            }
            else
            {
                lblMessage.Visible = true;
                lblMessage.ForeColor = System.Drawing.Color.Red;
                lblMessage.Text = "Only images (.jpg, .png, .gif and .bmp) can be uploaded";
                hyperlink.Visible = false;
            }
        }
    }
}

வெப் பயன்பாட்டை இயக்கி ஒரு இமேஜை அப்லோட்  செய்து கொள்ளவும். இப்பொழுது ஹைபர்லிங்கை கிளிக் செய்தால் webform2.aspx என்பது open ஆகும். இந்த பக்கத்தை முதலில் நாம் டிசைன் செய்ய வேண்டும்.
இமேஜின் ஐடி ஆனது ஃபார்மின் கொரி ஸ்டிரிங்க் பாரா மீட்டர். இதை பயன்படுத்தி இமேஜை கொரி மூலம் எக்ஸ்கிகியூட் செய்து பெற வேண்டும்.
Sqlserver-ல் பின் வரும் ஸ்டோர்டு பிரசிசர் ஒன்றை உருவாக்கவும்.
Create procedure spGetImageById
@Id int
as
Begin
    Select ImageData
    from tblImages where Id=@Id
End
Go
 இதில் spGetImageById என்பது பிரசிசரின் பெயர்.. இதற்கு @id ஆனது  இன்புட் கொடுக்கப்பட்டு ImageData ரீட் செய்யப்படுகின்றது.
கீழ்வரும்படி ஒரு இமேஜ் கன்ட் ரோலை webform2 –ல் உருவாக்கிக் கொள்ளவும்.
<asp:Image ID="Image1" Height="500px" Width="500px" runat="server" />

WebForm2.aspx.cs என்பதில் பின் வரும் நிரல் வரிகளை இனைக்கவும்.
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace Demo
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("spGetImageById", con);
                cmd.CommandType = CommandType.StoredProcedure;

                SqlParameter paramId = new SqlParameter()
                {
                    ParameterName = "@Id",
                    Value = Request.QueryString["Id"]
                };
                cmd.Parameters.Add(paramId);

                con.Open();
                byte[] bytes = (byte[])cmd.ExecuteScalar();
                string strBase64 = Convert.ToBase64String(bytes);
                Image1.ImageUrl = "data:Image/png;base64," + strBase64;
            }
        }
    }
}
இப்பொழுது வெப் ஃபார்ம்2 லோட் ஆகும் பொழுது இமேஜ் ஆனது காட்சிப்படுத்தப்படுகின்றது.
நன்றி
முத்து கார்த்திகேயன்,மதுரை.

ads Udanz

No comments:

Post a Comment