Retroceder   Foros del Web > Programación para sitios web > .NET > web forms

Respuesta
 
Herramientas Desplegado
Antiguo 24-sep-2006, 10:02   #1 (permalink)
Windows está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 238
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.
Windows está desconectado   Responder Citando
Antiguo 26-sep-2006, 08:10   #2 (permalink)
Mitico está en el buen camino
 
Fecha de Ingreso: marzo-2003
Mensajes: 83
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
Mitico está desconectado   Responder Citando
Antiguo 26-sep-2006, 08:30   #3 (permalink)
Mitico está en el buen camino
 
Fecha de Ingreso: marzo-2003
Mensajes: 83
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.
Mitico está desconectado   Responder Citando
Antiguo 26-sep-2006, 20:48   #4 (permalink)
Windows está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 238
Muchas gracias Mitico!!!

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

Saludos,
__________________
I'm Windows.
Windows está desconectado   Responder Citando
Antiguo 03-oct-2006, 20:39   #5 (permalink)
OmarGP ha deshabilitado el karma
 
Avatar de OmarGP
 
Fecha de Ingreso: agosto-2006
Mensajes: 20
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
OmarGP está desconectado   Responder Citando
Antiguo 04-oct-2006, 01:54   #6 (permalink)
Mitico está en el buen camino
 
Fecha de Ingreso: marzo-2003
Mensajes: 83
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
Mitico está desconectado   Responder Citando
Antiguo 18-oct-2006, 01:24   #7 (permalink)
aftermind ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2006
Mensajes: 1
Codigo en VB

Hola Mitico podrias poner tu codigo original en VB?, gracias
aftermind está desconectado   Responder Citando
Antiguo 03-may-2008, 10:23   #8 (permalink)
JorgeH8 ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Cool 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
JorgeH8 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 14:08.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93