martes, 21 de octubre de 2008

Leer y grabar imagenes en la base de datos- ASPNET

ASP.NET proporciona un mecanismo sencillo para cargar archivos de imagen a una base de datos, como SQL Server. Las imágenes se pueden almacenar en una tabla de base de datos que es atributo de datos de imagen de tipo.

Puede utilizar la siguiente instrucción SQL para crear una tabla que puede almacenar archivos de imagen:

create table myimages
(
imgid int identity(1,1) primary key,
imgname varchar(30) null,
imgfile image not null,
imgtype varchar(30) null
)

En el código anterior, el cuadro atributos son los siguientes:

* imgid: Para almacenar el identificador de la imagen y es la clave principal de la tabla.
* imgName: Para almacenar un nombre de la imagen.
* imgfile: Para almacenar datos de imagen binarios.
* imgtype: Para almacenar el tipo de contenido de la imagen

Las imágenes Web de forma se pueden cargar en la anterior tabla de base de datos. La carga de archivo de imagen desde el formulario de la web se pueden clasificar en las siguientes tareas:

1. Creación de un formulario web para subir los ficheros de imagen.
2. Carga de archivos de imagen a la base de datos.

Creación de la Web de forma para subir los ficheros de imagen

El formulario HTML que se cargan los archivos de imagen a una base de datos debe cumplir los siguientes requisitos:

* Utilice multipart / form-cifrado de datos
* Utilice el método POST.

Puede utilizar el siguiente fragmento de código para crear un formulario para la carga de imágenes:

<form enctype="multipart/form-data" id="Form2" method="post" runat="server">
<h3> Demo on working with image filesh3>
<asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 120px" runat="server">Enter File nameasp:Label>
<asp:Button id="Button2" style="Z-INDEX: 107; LEFT: 248px; POSITION: absolute; TOP: 264px" runat="server" Text="View images" Width="96px">
<asp:Button id="Button1" style="Z-INDEX: 106; LEFT: 248px; POSITION: absolute; TOP: 216px" runat="server" Text="Upload Me"> <input id="upload_file" type="file" runat="server" style="Z-INDEX: 105; LEFT: 256px; POSITION: absolute; TOP: 160px">
<asp:TextBox id="txtimgname" style="Z-INDEX: 102; LEFT: 256px; POSITION: absolute; TOP: 120px" runat="server">
asp:TextBox>
form>



En el código anterior, el atributo enctype notifica al servidor que los datos binarios se subirán. El formulario tiene un archivo de control sobre el terreno por el nombre upload_file, que puede utilizar para buscar y localizar el archivo. El formulario también tiene dos botones de control, uno para subir y uno para ver. La interfaz se parece a como se muestra en la figura:


Cargar un archivo de imagen a una base de datos

Cuando el usuario hace clic en el botón de subida me, un manejador de evento se invoca. En el evento que usted puede agregar el código siguiente al cargar el archivo en la base de datos:

private void Button1_Click(object sender, System.EventArgs e)
{
Stream img_strm = upload_file.PostedFile.InputStream;
//Retrieving the length of the file to upload
int img_len = upload_file.PostedFile.ContentLength;
//retrieving the type of the file to upload
string strtype = upload_file.PostedFile.ContentType.ToString();
string strname = txtimgname.Text.ToString();
byte[] imgdata = new byte[img_len];
int n = img_strm.Read(imgdata, 0, img_len);
int result = SaveToDB(strname, imgdata, strtype);
}


En el código anterior, hay tres piezas principales de datos que son importantes para cargar la imagen:

Content-Type (strtype)
Name (strname)
ImageData (imgdata)


El código anterior en el archivo para ser cargado en sptored es img_strm, objeto de flujo de la clase. En img_strm el archivo se almacena en formato bimary Usted debe convertir a matriz de bytes antes de cargar en la base de datos. La siguiente declaración de la anterior fragmento de código muestra cómo el archivo se convierte en matriz de bytes:

int n = img_strm.read (imgdata, 0, imglen)

El objeto Stream proporciona la lectura () método para convertir el archivo binario a partir de matriz de bytes. Acepta tres paramters

* búfer: Especifica una matriz de bytes.
* Offset: Especifica el byte en el buffer, desde donde el almacenamiento de datos se iniciará.
* Cuenta: Especifica el número máximo de bytes que se lee desde el actual flujo.

Leer la imagen de la db
El código anterior en el archivo para ser cargado en sptored es el código principal el desempeño de esta función se da a continuación. Su caso manejador de la "opinión de la imagen" evento. El nombre de la imagen que está escrito en el cuadro de texto en la pantalla.

private void Button2_Click(object sender, System.EventArgs e)
{
connection.Open();
SqlCommand command1 = new SqlCommand("select imgfile from myimages where imgname=@param", connection);
SqlParameter myparam = command1.Parameters.Add("@param", SqlDbType.NVarChar, 30);
myparam.Value = txtimgname.Text;
byte[] img = (byte[])command1.ExecuteScalar();
MemoryStream str = new MemoryStream();
str.Write(img, 0, img.Length);
Bitmap bit = new Bitmap(str);
Response.ContentType = "image/jpeg";//or you can select your imagetype from database or directly write it here
bit.Save(Response.OutputStream, ImageFormat.Jpeg);
connection.Close();
}

No hay comentarios.: