Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   Subir imágenes a SQL Server, desde ASP.NET (C#) (http://www.forosdelweb.com/f78/subir-imagenes-sql-server-desde-asp-net-c-428426/)

Windows 24/09/2006 10:02

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!

Mitico 26/09/2006 08:10

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 26/09/2006 08:30

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.

Windows 26/09/2006 20:48

Muchas gracias Mitico!!!

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

Saludos,

OmarGP 03/10/2006 20:39

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

Mitico 04/10/2006 01:54

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

aftermind 18/10/2006 01:24

Codigo en VB
 
Hola Mitico podrias poner tu codigo original en VB?, gracias :-D

JorgeH8 03/05/2008 10:23

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???
:aplauso:
Gracias


Jorge

getpack 07/03/2010 10:07

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

danielg 15/07/2010 15:27

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


La zona horaria es GMT -6. Ahora son las 17:20.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.