Foros del Web » Programando para Internet » ASP Clásico »

Verificar un Array Binario !! Me trae loco !!

Estas en el tema de Verificar un Array Binario !! Me trae loco !! en el foro de ASP Clásico en Foros del Web. Como pasar un Array a una variable Hola. Tengo el siguiente código que me lee una imagen JPG de una URL para posteriormente tratarla y ...
  #1 (permalink)  
Antiguo 12/08/2010, 11:34
 
Fecha de Ingreso: noviembre-2008
Ubicación: Barcelona
Mensajes: 52
Antigüedad: 15 años, 4 meses
Puntos: 0
Verificar un Array Binario !! Me trae loco !!

Como pasar un Array a una variable

Hola. Tengo el siguiente código que me lee una imagen JPG de una URL para posteriormente tratarla y guardarla.

Código:
Ruta_img = "http://... cualquier URL donde hay una foto .jpg ó .gif"

Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetTimeouts 50000, 60000, 10000, 100000 
objHTTP.Open "GET", Ruta_img, false	 '-- Cogemos la imagen		
objHTTP.Send
Al tratarse de una imagen JPG lo que trae es un Array binario, si queremos podemos verlo:

Response.BinaryWrite (objHttp.ResponseBody) y nos muestra algo parecido a esto:

Código:
ÿØÿàJFIFddÿìDuckydÿîAdobedÀÿÛ„

ÿÀÅ
ÿÄð   
!1AQaq ‘"ð¡±Á2 Ñá#5ñBR$%r3C³4Tt´Õ&'bSDÔEUu•F7W
—(’²Òcsƒ“„”e…¥µÅ6V–GgwH‚Ód¤Ä‡8X¢†Æ)
!1AQaq‘¡±"2ðÁBR#Ñáb$râ3s’S4²ÂÒñ‚
La idea es poder pasar esto en ASP a una cadena para poder verificar si los primeros caracteres son estos ÿØÿà que corresponden en hexadecimal con FFh D8h FFh E0h y también verificar los últimos que son FFh D9h y significa que el fichero JPG tiene las marcas SOI e EOI correctas, pues me he encontrado con un fichero que tiene SOI pero no tiene EOI, pese a que el fichero se presenta como correcto y se ve en pantalla etc... me peta con el siguiente famoso error pues no tiene EOI:
Invalid JPEG file structure: two SOI markers

Por si queréis comprobarlo el fichero JPG que se ve perfectamente pero la utilidad no puede abrirlo por falta de EOI es el siguiente:
http://www.kramerspain.com/images/pr...es/PT-101R.jpg

La idea es poder verificar los primeros bytes y los últimos para ver si son correctos.

Por ejemplo, además de verificar la URL, etc..., con otra rutina verifico el Array para saber si está lleno y lo recorro para ver su tamaño.

Código:
If IsArray(objHttp.ResponseBody) = TRUE Then
      HayFoto = "1"
Else                               '-- URL Correcta, pero NO hay Foto
      HayFoto = "0"
      Set objHTTP=Nothing
End If

for I = 0 to UBound(objHttp.responseBody)	
Next
Response.Write("<BR>Tamaño: " & I )
Pero no se acceder al dato del bit I del objHttp.responseBody para ver si es el código que necesito o pasar el Array a una cadena para verificarlo fácilmente, me da igual.

Alguien me puede ayudar para verificar este Array
  #2 (permalink)  
Antiguo 12/08/2010, 12:51
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Verificar un Array Binario !! Me trae loco !!

Interesante tu problema, se me antoja hacer pruebas nomás por cuestiones didácticas, pero ahorita no tengo tiempo, lo que puedo sugerirte es que le eches un ojo al programita xelupload.asp y veas cómo se parsean los datos binarios

saludos
  #3 (permalink)  
Antiguo 12/08/2010, 17:10
 
Fecha de Ingreso: noviembre-2008
Ubicación: Barcelona
Mensajes: 52
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Verificar un Array Binario !! Me trae loco !!

Gracias Myakire

Finalmente lo he resuelto buscando por Google.
Hay una página interesante que trata el tema de Binario a Cadenas y viceversa, la adjunto para quien lo necesite:

http://www.motobit.com/tips/detpg_BinASP/

La solución ha sido esta:

Código:
'-- Verificación de estructura de fichero JPG válida
Function BinaryToString(dato)
  Dim I, S, F
  For I = 1 To 4	'-- Leemos marca SOI de 4 bytes FF D8 FF E0
    S = S & Chr(AscB(MidB(dato, I, 1)))
  Next
  For I = (LenB(dato) - 2) To LenB(dato)  '-- Leemos marca EOI de 2 bytes FF D9
    F = F & Chr(AscB(MidB(dato, I, 1)))
  Next    
  BinaryToString = S & F
End Function
Luego verificamos si SOI y EOI existen:

Código:
bString = BinaryToString(objHttp.ResponseBody)
If bString = "ÿØÿàÿÙ" Then
    HayFoto = "1"
Else                          
    HayFoto = "0"
    Set objHTTP=Nothing
End If
Con esto conseguimos finalmente bajar un fichero JPG y verificar que su estructura es correcta.
  #4 (permalink)  
Antiguo 13/08/2010, 07:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Verificar un Array Binario !! Me trae loco !!

Si, ese mismo procedimiento era el que quería que leyeras en la clase del xelupload, es muy didáctico para el trabajo con binarios.

Que bueno que lo resolviste y posteaste la solución

Etiquetas: binario, loco, verificar
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:30.