style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Obtener la imagen en bytes de una URL

Hola, estoy intentando obtener la imagen de perfil de FB para almacenarla en la computadora local para ello utilizo el siguiente método:

        static def getImageBytesFromURL(urlString) throws MalformedURLException{
                def bais = new ByteArrayOutputStream();
                def is = null;
                def url=new URL(urlString);

                try {
                        is = url.openStream();
                        def byteChunk = new byte[4096];
                        def n;

                        while ((n = is.read(byteChunk)) > 0) {
                                bais.write(byteChunk, 0, n);
                        }

                } catch (IOException e) {
                        log.error "Error obteniendo bytes desde ${url.toExternalForm()}";
                } finally {
                        if (is != null) {
                                is.close();
                        }
                }
                bais.toByteArray()
        }

pero nunca entra al ciclo porque la instrucción is.read(byteChunk) siempre devuelve -1, alguna idea del porque pasa esto?

la url que intengo bajar es: http://graph.facebook.com/833273773376833/picture

espero puedan ayudarme, saludos.

PD no envia ningun error, simplemente no lee nada...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Al parecer tienes un redirect

Al parecer tienes un redirect (al menos cuando le doy click en la imagen me muestra otra ) lo cual indicaría que ese url no te está sirviendo ningún contenido (por lo tanto -1 de end of stream )

Veamos....

Si, te esta devolviendo 301 que se movió. Quizá podrías usar una biblioteca de http ( HttpClient por ejemplo ) y dejar que te resuelva los redirects.

Imagen de Shadonwk

es lo que vi, recién probé el código con una url diferente y si me obtiene los bytes :D

esquema

En realidad, java.net.URLConnection es capaz de redigir automáticamente (a través de java.net.HttpURLConnection), siempre y cuando el esquema sea el mismo (p.ej. http).

Imagen de Shadonwk

es lo raro, puesto que tengo

es lo raro, puesto que tengo ese código en otra aplicación y funciona perfecto, incluso con el redirect, sin embargo en una nueva aplicación no es capaz de hacer el redirect pero ya lo resolví usando un método del Api que da la URL final.

PD el código de arriba funciona

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">