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:
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...
- Inicie sesión o regístrese para enviar comentarios
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.
sí
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 dejava.net.HttpURLConnection
), siempre y cuando el esquema sea el mismo (p.ej.http
).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