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

Como identificar el tipo de archivo que esta en la base de datos

Estas en el tema de Como identificar el tipo de archivo que esta en la base de datos en el foro de ASPX (.net) en Foros del Web. Hola amigos tengo una consulta, la aplicación ya esta corriendo y funciona, pero al momento de abrir un archivo .doc o .ppt me trae basura ...
  #1 (permalink)  
Antiguo 27/02/2008, 15:10
 
Fecha de Ingreso: septiembre-2007
Mensajes: 58
Antigüedad: 16 años, 8 meses
Puntos: 0
Exclamación Como identificar el tipo de archivo que esta en la base de datos

Hola amigos tengo una consulta, la aplicación ya esta corriendo y funciona, pero al momento de abrir un archivo .doc o .ppt me trae basura esto se que se arregla poniendo el tipo de archivo que es pero como lo podría hacer.

aqui esta el codigo que ya tengo,
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Id As String = Request.QueryString("Id")
Dim con As String = ConfigurationManager.ConnectionStrings("WebSiteCon nectionString").ConnectionString
Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM WebMensajes WHERE IdNum='" + Id + "'", con)
Dim ds As DataSet = New DataSet
da.Fill(ds)
Dim dt As DataTable = ds.Tables(0)
If dt.Rows.Count < 1 Then
Response.End()
Else
Response.ContentType = "image/pjpeg"
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
End If
End Sub

De repende poniendo algun if o case no se...

En esta ocasión me trae una imagen jpg pero debo hacer algo para que me detecte el tipo de archivo que viene y asi lo pueda construir correctamente.

Este código abre sin problemas archivos jpg, gif y pdf. si le quitas el Response.ContentType = "image/pjpeg"
para los que no lo tienen.


si alguien me puede ayudar, de antemano gracias.
  #2 (permalink)  
Antiguo 27/02/2008, 15:16
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Como identificar el tipo de archivo que esta en la base de datos

pues lo unico q se me ocurre si es q estas almacenando todo es q revisaras las cabeceras de tus archivos. busca en un sitio creo q es Filext los bytes q te identifican a cada formato.

saludos
peter.
  #3 (permalink)  
Antiguo 27/02/2008, 15:48
 
Fecha de Ingreso: septiembre-2007
Mensajes: 58
Antigüedad: 16 años, 8 meses
Puntos: 0
Exclamación Re: Como identificar el tipo de archivo que esta en la base de datos

Aún sigo perdido, intente hacer un if de esta forma pero no funciona se salta todo y sale el mensaje que puse.

If dt.Rows.Count < 1 Then
Response.End()
Else
If Response.ContentType = "image/pjpeg" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "image/gif" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/vnd.ms-excel" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/msword" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/x-excel" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
End if

puede que este método sea mediocre ustedes me lo dirán.

gracias...
  #4 (permalink)  
Antiguo 27/02/2008, 16:30
Avatar de jlbautista  
Fecha de Ingreso: enero-2007
Ubicación: Durango, Méx.
Mensajes: 175
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: Como identificar el tipo de archivo que esta en la base de datos

Cita:
Iniciado por roly0476 Ver Mensaje
Aún sigo perdido, intente hacer un if de esta forma pero no funciona se salta todo y sale el mensaje que puse.

If dt.Rows.Count < 1 Then
Response.End()
Else
If Response.ContentType = "image/pjpeg" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "image/gif" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/vnd.ms-excel" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/msword" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
If Response.ContentType = "application/x-excel" = True Then
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Else
Response.Write("No hay Data")
End If
End if

puede que este método sea mediocre ustedes me lo dirán.

gracias...
************************************************** *******

Solo recuerda las jerarquias de operadores... al entrar al primer IF y detectar q no es un .jpg te escribirá "NO HAY DATA" y 'brincaría' al siguiente IF a detectar si es el sig tipo de archivo, y si aun no es .gif te volvería a mandar el msj "NO HAY DATA"...

Deja checo unas cosas y si encuentro algo más q te pueda ayudar, te posteo again...

Have a nice day
  #5 (permalink)  
Antiguo 27/02/2008, 16:43
 
Fecha de Ingreso: enero-2004
Ubicación: Ciudad de México
Mensajes: 476
Antigüedad: 20 años, 3 meses
Puntos: 14
Re: Como identificar el tipo de archivo que esta en la base de datos

En esto que escribiste:

Cita:
Iniciado por roly0476 Ver Mensaje
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
Y en esto que te contestaron, tienes la respuesta:

Cita:
Iniciado por Peterpay Ver Mensaje
pues lo unico q se me ocurre si es q estas almacenando todo es q revisaras las cabeceras de tus archivos. busca en un sitio creo q es Filext los bytes q te identifican a cada formato.
Tu archivo esta almacenado en la base de datos, como un arreglo de bytes, por lo que puedes buscar en internet cuales son los bytes que estan almacenados en la cabecera de cada tipo de archivo, y en base a eso, mostrar el Content Type correspondiente.

Por ejemplo:

DIM archivo() as BYTE
archivo= CType(dt.Rows(0)(10), Byte())
IF archivo(0)=1 AND archivo(1)=2 AND archivo(2)=3 THEN
Response.ContentType = "image/pjpeg"
END IF
.
.
.
IF archivo(0)=7 AND archivo(1)=8 AND archivo(2)=9 THEN
Response.ContentType = "application/vnd.ms-excel"
END IF
.
.
.
Response.BinaryWrite(archivo)

P. D.- Los valores que puse (1, 2, 3, 7, 8 y 9) son solo de ejemplo, estos no son los valores de bytes reales para esos tipos de archivo (JPG y Excel), tienes que buscar los correctos.

Última edición por cesar_nava; 27/02/2008 a las 16:54
  #6 (permalink)  
Antiguo 27/02/2008, 17:02
Avatar de jlbautista  
Fecha de Ingreso: enero-2007
Ubicación: Durango, Méx.
Mensajes: 175
Antigüedad: 17 años, 3 meses
Puntos: 1
Busqueda Re: Como identificar el tipo de archivo que esta en la base de datos

Estaba cabilando...

No te sirve tmb almacenar los archivos fisicamente en alguna locación de tu server, y en la BD solo almacenar el link para descargarlos al cliente??

Comentas, pls
  #7 (permalink)  
Antiguo 28/02/2008, 10:50
 
Fecha de Ingreso: septiembre-2007
Mensajes: 58
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Como identificar el tipo de archivo que esta en la base de datos

Lamentablemente no he dado con un buen resultado, no encuentro los valores para cada encabezado para poder cotejar con el archivo y así poder asignarle el tipo de dato.

intente con esto:

Dim extension As String
Dim tipo As String

extension = dt.Rows(0)(10)(Request("ContentType"))

Select Case extension
Case "jpg"
tipo = "image/pjpeg"
Case "txt"
tipo = "text/html"
Case "doc"
tipo = "application/msword"
Case "xls"
tipo = "application/msexcel"
Case "pdf"
tipo = "application/pdf"'
Case "avi"
tipo = "video/avi"
End Select

Response.Clear()
Response.Buffer = True
Response.ContentType = tipo
Response.BinaryWrite(CType(dt.Rows(0)(10), Byte()))
  #8 (permalink)  
Antiguo 29/02/2008, 08:10
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Como identificar el tipo de archivo que esta en la base de datos

Tienes de 2 como comentan arriba o anexas un campo de mimetype q contenga el tipo y te ahorras chamba o evaluas los posibles tipos q pudieses tener buscando al inicio del archivo los siguientes valores (ojo hexadecimales)

jpg
FF D8 FF
doc
D0 CF 11 E0 A1 B1 1A E1
pdf
25 50 44 46 2D 31 2E
gif
47 49 46 38
xls
D0 CF 11 E0 A1 B1 1A E1 00
png
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
  #9 (permalink)  
Antiguo 29/02/2008, 08:11
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Como identificar el tipo de archivo que esta en la base de datos

si unosi tus primeros 6 bytes son FF D8 FF entonces es un jpg. y le agregas el mime type string correspondiente.

saludos
peter
  #10 (permalink)  
Antiguo 29/02/2008, 08:20
 
Fecha de Ingreso: septiembre-2007
Mensajes: 58
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Como identificar el tipo de archivo que esta en la base de datos

Por esto es que me gusta este foro, voy a hacer los cambios y les comento como me fue la verdad es que he buscado esos codigos y no los he encontrado, pruebo y les aviso.

gracias de antemano.
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 10:21.