Foros del Web » Programando para Internet » ASPX (.net) »

Subir imágenes a SQL Server, desde ASP.NET (C#)

Estas en el tema de Subir imágenes a SQL Server, desde ASP.NET (C#) en el foro de ASPX (.net) en Foros del Web. Hola a TODOS! Alguien tiene un ejemplo (en C#) de como puedo subir imágenes desde una página web, y guardarlas en un campo de tipo ...
  #1 (permalink)  
Antiguo 24/09/2006, 10:02
 
Fecha de Ingreso: enero-2003
Mensajes: 243
Antigüedad: 21 años, 2 meses
Puntos: 0
Pregunta Subir imágenes a SQL Server, desde ASP.NET (C#)

Hola a TODOS!

Alguien tiene un ejemplo (en C#) de como puedo subir imágenes desde una página web, y guardarlas en un campo de tipo image de Sql Server ?

También de como puedo recuperar la imágen para usarla en una página web.

Desde ya muchas gracias!
__________________
I'm Windows.
  #2 (permalink)  
Antiguo 26/09/2006, 08:10
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años
Puntos: 1
Hola Windows,

yo lo tengo hecho en VB, intentaré "traducírtelo" pero no te fíes del todo.

Lo primero sería tener un INPUT de tipo FILE en la aspx

Código:
<INPUT id="txtImagen" type="file" name="txtImagen" runat="server">
y a la hora de guardar los datos lo que tendrías que hacer es:

Código:
//En las siguientes variables leemos los datos del fichero
private Int32 Tamano = System.Convert.ToInt32(txtImagen.PostedFile.InputStream.Length);
private string Tipo = txtImagen.PostedFile.ContentType;
private string Nombre = txtImagen.PostedFile.FileName.Substring(txtImagen.PostedFile.FileName.LastIndexOf("\\") + 1);
private byte[] Contenido = new byte[Tamano + 1];
txtImagen.PostedFile.InputStream.Read(Contenido, 0, Tamano);

//Salvamos Fichero en la tabla
sqlCon = new SqlClient.SqlConnection("CadenaConexion");
sqlCon.Open();
strComando = "Insert Into Tabla(Contenido_Fichero, Tipo_Fichero, Tamano_Fichero, Nombre_Fichero) " + "Values(@Contenido, '" + Tipo + "', " + Tamano + ", '" + Nombre + "')";
sqlComando = new SqlClient.SqlCommand(strComando, sqlCon);
sqlComando.Parameters.Add("@Contenido", Contenido);
sqlComando.ExecuteNonQuery();
sqlComando.Dispose();

sqlCon.Close();
sqlCon.Dispose();
Hace tiempo que no uso eso y lo tenía en VS2003, espero te pueda servir igualmente. No obstante los campos a guardar pueden variar en dependencia de los que te interesen a ti. Lo que sí me acuerdo, y no sé porque era, es que el campo Contenido (el que realmente tiene el fichero) había que pasarlo obligatoriamente por parámetro. El campo Tipo puede ser útil para saber de qué tipo es el fichero a la hora de leerlos (intentaré encontrarte esta parte ahora).

Un saludo
  #3 (permalink)  
Antiguo 26/09/2006, 08:30
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años
Puntos: 1
Para leerlos:

Código:
//Valor del Id del fichero a mostrar
private Int32 Identif = Request.Params["ValorIdentif"];

//Busca en la tabla que sea el registro correspondiente a ese ID
//Y saca los 4 campos necesarios que siempre se llamarán igual en todas las tablas
private SqlConnection Conecta = new SqlConnection("CadenaConexion");
private SqlCommand Comando = new SqlCommand("Select Nombre_Fichero, Contenido_Fichero, Tipo_Fichero, Tamano_Fichero " + "From TABLA Where idFichero=@ID", Conecta);
Comando.Parameters.Add("@ID", Identif);
SqlDataReader Datos = null;
Conecta.Open();
Datos = Comando.ExecuteReader(CommandBehavior.CloseConnection);
try
{
	 if (Datos.HasRows)
	 {
		  Datos.Read();
		  if (System.Convert.ToString(Datos["Tipo_Fichero"]) == "application/pdf")
			   Response.AppendHeader("content-disposition", "attachment; filename=" + System.Convert.ToString(Datos["Nombre_Fichero"]));
		  else
			   Response.AppendHeader("content-disposition", "inline; filename=" + System.Convert.ToString(Datos["Nombre_Fichero"]));
		  // Establece el tipo de contenido que se va amostrar. Por ejemplo: "application/msword"
		  Response.ContentType = System.Convert.ToString(Datos["Tipo_Fichero"]);
		  Response.Charset = "charset.ansi";
		  //saca el contenido del documento a response output stream
		  Response.OutputStream.Write((byte[])(Datos["Contenido_Fichero"]), 0, System.Convert.ToInt32(Datos["Tamano_Fichero"]));
	 }
}
catch (Exception ex)
{
	 Response.Write(ex.ToString());
}
finally
{
	 Datos.Close();
}
Éste código lo tenía en una página sin nada más y lo que hacía era un enlace a esa página abriéndola en ventana nueva. Puedes usarlo así o con un IFrame, el resto investigar porque ya ni idea... ¡qué tiempos aquellos!

Al final volví a guardar los archivos físicamente, me resultó más cómodo.

Un saludo.
  #4 (permalink)  
Antiguo 26/09/2006, 20:48
 
Fecha de Ingreso: enero-2003
Mensajes: 243
Antigüedad: 21 años, 2 meses
Puntos: 0
Muchas gracias Mitico!!!

Se entiende muy bien!, ahora mismo me pongo a probarlo...

Saludos,
__________________
I'm Windows.
  #5 (permalink)  
Antiguo 03/10/2006, 20:39
Avatar de OmarGP  
Fecha de Ingreso: agosto-2006
Mensajes: 20
Antigüedad: 17 años, 8 meses
Puntos: 0
Compañero mitico a ver si me puedes ayudar
me esta dando este error al probar es fabuloso ejemplo

Arithmetic operation resulted in an overflow.

Line 150:Dim tipo As String = fileupdate2.PostedFile.ContentType
Line 151:Dim Nombre As String = fileupdate2.PostedFile.......
Line 152:Dim Contenido As Byte() = {tamaño + 1} (Aqui me da error de overflow

Line 153: fileupdate2.PostedFile.InputStream.Read(Contenido, 0, tamaño)

No se si es que la conbversion a de c# a vb esta mal ..por favor ayudame amigo
  #6 (permalink)  
Antiguo 04/10/2006, 01:54
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años
Puntos: 1
hola OmarGP,

aquello era un conversión de VB a C# que no sé si realmente estaba bien, esa parte que te falle en VB es:

Código:
Dim Tamano As Int32 = CInt(txtImagen.PostedFile.InputStream.Length)
Dim Tipo As String = txtImagen.PostedFile.ContentType
Dim Nombre As String = txtImagen.PostedFile.FileName.Substring(txtImagen.PostedFile.FileName.LastIndexOf("\") + 1)
Dim Contenido(Tamano) As Byte
txtImagen.PostedFile.InputStream.Read(Contenido, 0, Tamano)
Espero te sirva.

Un saludo
  #7 (permalink)  
Antiguo 18/10/2006, 01:24
 
Fecha de Ingreso: octubre-2006
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
Codigo en VB

Hola Mitico podrias poner tu codigo original en VB?, gracias
  #8 (permalink)  
Antiguo 03/05/2008, 10:23
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 15 años, 11 meses
Puntos: 0
Re: Subir imágenes a SQL Server, desde ASP.NET (C#)

Hola Mitico,
Como bien dice mi predecesor.. puedes subir tu original codigo en VB 2003???

Gracias


Jorge
  #9 (permalink)  
Antiguo 07/03/2010, 10:07
 
Fecha de Ingreso: marzo-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Subir imágenes a SQL Server, desde ASP.NET (C#)

Disculpa amigo pero cuando se muestra la imagen se muestra en la pagina completa, me puedes ayudar para mostrarle con dimensiones especificas y asi poder poner un texto y debajo la imagen de la BDD
  #10 (permalink)  
Antiguo 15/07/2010, 15:27
 
Fecha de Ingreso: julio-2010
Mensajes: 2
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Subir imágenes a SQL Server, desde ASP.NET (C#)

Buenas a todos, Mitico haz me un gran favor
postea el EJEMPLO original en vb q tenias
me salvas las Valgues
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:58.