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!
|
|
#1 (permalink) |
![]() Fecha de Ingreso: noviembre-2002
Mensajes: 238
|
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) |
![]() 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:
y a la hora de guardar los datos lo que tendrías que hacer es:<INPUT id="txtImagen" type="file" name="txtImagen" runat="server">
Código:
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).//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();
Un saludo |
|
|
|
|
|
#3 (permalink) |
![]() Fecha de Ingreso: marzo-2003
Mensajes: 83
|
Para leerlos:
Código:
É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!//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();
}
Al final volví a guardar los archivos físicamente, me resultó más cómodo. Un saludo. |
|
|
|
|
|
#5 (permalink) |
![]() 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 |
|
|
|
|
|
#6 (permalink) |
![]() 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:
Espero te sirva.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)
Un saludo |
|
|
|