ASP.NET - cargar imagen desde Mysql

 
Vista:
Imágen de perfil de Emiliano

cargar imagen desde Mysql

Publicado por Emiliano (13 intervenciones) el 28/11/2014 17:26:37
Hola, me podrian sugerir algun cambio al codigo que les presento a continuación:

Con este codigo trato de recuperar una imagen desde la BD Mysql en Asp.net c#.
1
2
3
4
5
6
7
8
9
///recupero desde la BD
 
byte[] Imagen=(byte[])mo.Tables[0].Rows[0][13];
 
///////////
 
string valor = Convert.ToBase64String(Imagen,0,Imagen.Length);
 
this.Image1.ImageUrl = "data:image/" + "png;base64," + valor;

Pero solo me carga una parte de la imagen
Gracias por sus comentarios.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Emiliano

cargar imagen desde Mysql

Publicado por Emiliano (13 intervenciones) el 29/11/2014 16:47:19
Hola, como estan, estamos haciendo un proyecto con unos compañeros y necesariamente tenemos que subir imagenes, pero por lo general nos acostumbramos al desarrollo de aplicaciones en escritorio y las aplicaciones web son un poco distintas en el manejo de los procesos, pero por si alguien se le presenta este problema, les dejo como le lo realizamos y como le presentamos para editar los datos por si alguien lo necesita:

El problema que se presentaba, que se cargaba una parte pequeña, fue por utilizar la imagen de campo blob, por lo general se utiliza lonblob, pero porque, la primera son para imagenes miniaturas o pequeñas y encambio las longblob son para las grandes o de más peso:

Lo primero es tener un fileUpload, segido un boton por si quieren verificar si les gusta la imagen, previsualizar:

protected void btnCargar_Click(object sender, EventArgs e)
{
try
{
if (this.FileUpload1.HasFile && this.btnCargar.Text == "Cargar")
{
string[] allowedExtension = { ".gif", ".jpg", ".png", ".jpeg" };
string fileExtension = System.IO.Path.GetExtension(this.FileUpload1.FileName);

if (allowedExtension.Contains(fileExtension))
{
if (this.btnCargar.Text == "Cargar")
{
int fileSize = FileUpload1.PostedFile.ContentLength;
if (fileSize < 3100000)
{
HttpPostedFile file = FileUpload1.PostedFile;

//almacenar fichero en byte[]
int lengthFile = file.ContentLength;
byte[] fileArray = new byte[lengthFile];
file.InputStream.Read(fileArray, 0, lengthFile);

ViewState["ima"] = fileArray;
//grabar en Session
Session["IMAGEN"] = fileArray;

//mostrar imagen en control Image
ByteArrayToImageControl(fileArray, fileExtension);

this.btnCargar.Text = "Cargar";
}
else
{
lbmensajeImagen.Text = "El tamaño de la imagen supera los 3 MB";

}


}


}
}

}
catch (MySqlException ex)
{ //error
throw ex;
}



}

protected void ByteArrayToImageControl(byte[] fileArray, string fileExtension)
{
string base64String = Convert.ToBase64String(fileArray, 0, fileArray.Length);
this.Image1.ImageUrl = "data:image/" + fileExtension + "png;base64," + base64String;
this.Image1.Visible = true;
}

El codigo anterior fue para previsualizar la imagen,

pero porque ViewState["ima"] = fileArray; , ustedes deben saber que la naturaleza d las web al momento de hacer click siempre va hacer el postback, y por lo general se pierden la información de las variables, con eso mantengo la información de la imagen tipo byte.

Para guardar.

protected void btnAceptar_Click(object sender, EventArgs e)
{

proveedor=selectProveedor.Value.ToString();
marca = selectMarca.Value.ToString();
utilizacion=selectUtilizacion.Value.ToString();
utilizacion = selectUtilizacion.Value.ToString();

if (FileUpload1.HasFile)////porque esto, es por si no quiere previsualizar la imagen
{
HttpPostedFile file = FileUpload1.PostedFile;

//almacenar fichero en byte[]
int lengthFile = file.ContentLength;
fileArray = new byte[lengthFile];
file.InputStream.Read(fileArray, 0, lengthFile);
}else{

fileArray =(byte[])ViewState["ima"]; ///quiere decir que previsualizo la imagen
}

if ((txtNombre.Text != "") && (utilizacion != "") && (txtUtilidad.Text != "") && (marca != "") && (proveedor != "") && (txtPrecio.Text != "") && (txtCantidad.Text != ""))
{




string conexion = "server=localhost;user=root;database=ruiseñor;Password=";
MySqlConnection con = new MySqlConnection(conexion);
try
{

MySqlCommand cmd = new MySqlCommand("Nuevo_Producto", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("nombre", MySqlDbType.VarChar);
cmd.Parameters[0].Direction = ParameterDirection.Input;
cmd.Parameters[0].Value = txtNombre.Text;
cmd.Parameters.Add("utilizacion", MySqlDbType.VarChar);
cmd.Parameters[1].Direction = ParameterDirection.Input;
cmd.Parameters[1].Value = utilizacion;
cmd.Parameters.Add("utilidad", MySqlDbType.VarChar);
cmd.Parameters[2].Direction = ParameterDirection.Input;
cmd.Parameters[2].Value = txtUtilidad.Text;
cmd.Parameters.Add("fechael", MySqlDbType.VarChar);
cmd.Parameters[3].Direction = ParameterDirection.Input;
cmd.Parameters[3].Value = txtfechaEl.Text;
cmd.Parameters.Add("fechaex", MySqlDbType.VarChar);
cmd.Parameters[4].Direction = ParameterDirection.Input;
cmd.Parameters[4].Value = txtfechaEx.Text;
cmd.Parameters.Add("marca", MySqlDbType.VarChar);
cmd.Parameters[5].Direction = ParameterDirection.Input;
cmd.Parameters[5].Value = marca;
cmd.Parameters.Add("proveedor", MySqlDbType.VarChar);
cmd.Parameters[6].Direction = ParameterDirection.Input;
cmd.Parameters[6].Value = proveedor;
cmd.Parameters.Add("precio", MySqlDbType.VarChar);
cmd.Parameters[7].Direction = ParameterDirection.Input;
cmd.Parameters[7].Value = txtPrecio.Text;
cmd.Parameters.Add("cantidad", MySqlDbType.VarChar);
cmd.Parameters[8].Direction = ParameterDirection.Input;
cmd.Parameters[8].Value = txtCantidad.Text;
cmd.Parameters.Add("dosisn", MySqlDbType.VarChar);
cmd.Parameters[9].Direction = ParameterDirection.Input;
cmd.Parameters[9].Value = txtdosisN.Text;
cmd.Parameters.Add("dosisa", MySqlDbType.VarChar);
cmd.Parameters[10].Direction = ParameterDirection.Input;
cmd.Parameters[10].Value = txtdosisA.Text;
cmd.Parameters.Add("contra", MySqlDbType.VarChar);
cmd.Parameters[11].Direction = ParameterDirection.Input;
cmd.Parameters[11].Value = txtContra.Text;
cmd.Parameters.Add("imagen", MySqlDbType.LongBlob);
cmd.Parameters[12].Direction = ParameterDirection.Input;
cmd.Parameters[12].Value = fileArray;
con.Open();
cmd.ExecuteNonQuery();
Lbmensaje.Text="Se registro la información correctamente";


}
catch (MySqlException)
{ //error
Lbmensaje.Text = "Surgio un error al registrar, intentelo nuevamente";
}
finally
{
con.Close();
}





}else{

Lbmensaje.Text = "ingrese toda la información requerida";


}

}

Y si quiere n hacer un poco más ordenado lo pueden hacer en capas, este solo fue un ejemplo por lo general para evitar tener demasiado codigo en un solo forma se utiliza capas,

Para recuperar o editar:
DataSet mo = new DataSet();
mo=objprueba.buscar_producto(codigo);
if(mo!=null)
{
lbCodigo.Text = mo.Tables[0].Rows[0][0].ToString();
txtNombre.Text = mo.Tables[0].Rows[0][1].ToString();
txtUtilidad.Text = mo.Tables[0].Rows[0][2].ToString();
selectUtilizacion.Value = mo.Tables[0].Rows[0][3].ToString();
txtfechaEl.Text = mo.Tables[0].Rows[0][4].ToString();
txtfechaEx.Text = mo.Tables[0].Rows[0][5].ToString();
selectMarca.Value = mo.Tables[0].Rows[0][6].ToString();
selectProveedor.Value = mo.Tables[0].Rows[0][7].ToString();
txtPrecio.Text = mo.Tables[0].Rows[0][8].ToString();
txtCantidad.Text = mo.Tables[0].Rows[0][9].ToString();
txtdosisN.Text = mo.Tables[0].Rows[0][10].ToString();
txtdosisA.Text = mo.Tables[0].Rows[0][11].ToString();
txtContra.Text = mo.Tables[0].Rows[0][12].ToString();

byte[] Imag=(byte[])mo.Tables[0].Rows[0][13];

string i = Convert.ToBase64String(Imag,0,Imag.Length);
this.Image1.ImageUrl = "data:image/" + "png;base64," + i;
this.Image1.Visible = true;



}
Image1=el control tipo imagen que esta en el formulario.

Bueno espero que les sirva, a las personas que estamos iniciando y este codigo se le puede mejorar, solo depende de como sea su manejo personal de codificación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar