Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Descargar archivos de Internet con Java

Descargar archivos de Internet con Java

Autor jc mouse martes, enero 21, 2020

En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gif, *.mp4, *.webm, etc) utilizando el lenguaje de programación java y ayudándonos de librerías existentes que nos ahorran bastante tiempo de codificación.

La librería que utilizaremos se llama AsyncHttpClient y es una de las librerías más populares para la ejecución de solicitudes HTTP y procesar sus respuestas de forma asincrónica. La biblioteca también es compatible con el protocolo WebSocket. Está construido sobre Netty. Actualmente está compilado en Java 8, pero también se ejecuta en Java 9 y superior. Licenciado bajo la Licencia Apache, Versión 2.0

Instalación

Maven:

<!-- https://mvnrepository.com/artifact/org.asynchttpclient/async-http-client -->
<dependency>
    <groupId>org.asynchttpclient</groupId>
    <artifactId>async-http-client</artifactId>
    <version>2.10.4</version>
</dependency>

Descargar GIF animado en Java

El archivo a descargar es un GIF animado del personaje de Mr. Bean

la URL es:

https://thumbs.gfycat.com/TepidLinearCollie-size_restricted.gif

Implementamos el código java para realizar una llamada asíncrona y descarga el archivo

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.asynchttpclient.Dsl;
import org.asynchttpclient.AsyncCompletionHandler;
import org.asynchttpclient.AsyncHandler;
import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.HttpResponseBodyPart;
import org.asynchttpclient.Response;

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class Main {

    public static void main(String[] args) {
        try {
            //archivo a descargar
            final String ORIGEN = "https://thumbs.gfycat.com/TepidLinearCollie-size_restricted.gif";
            //archivo destino
            final String DESTINO = "archivo_descargado.gif";

            FileOutputStream stream = new FileOutputStream(DESTINO);

            AsyncHttpClient client = Dsl.asyncHttpClient();

            AsyncCompletionHandler<FileOutputStream> asyncHandler = new AsyncCompletionHandler<FileOutputStream>() {
                @Override
                public AsyncHandler.State onBodyPartReceived(HttpResponseBodyPart bodyPart)
                        throws Exception {
                    System.out.println("onBodyPartReceived LEN:" + bodyPart.length() + " bytes | Ultima parte: " + bodyPart.isLast());
                    //escribe en archivo parte por parte                   
                    stream.getChannel().write(bodyPart.getBodyByteBuffer());
                    return AsyncHandler.State.CONTINUE;
                }

                @Override
                public FileOutputStream onCompleted(Response response)
                        throws Exception {
                    System.out.println("Descarga completa");
                    return stream;
                }
            };

            FileOutputStream fos = client.prepareGet(ORIGEN).execute(asyncHandler).get();
            fos.close();
        } catch (FileNotFoundException ex) {
            System.err.println(ex.getMessage());
        } catch (InterruptedException | ExecutionException | IOException ex) {
            System.err.println(ex.getMessage());
        }

    }

}

En lugar de acumular la descarga en memoria, escribimos directamente los bytes en un archivo local utilizando el método getBodyByteBuffer(), de esta forma evitamos un consumo alto de memoria si el archivo a descargar fuera demasiado grande.

consola java

enjoy!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Autenticación de usuarios bajo el patrón MVC

Autenticación de usuarios bajo el patrón MVC

MVC es un patrón de arquitectura de software que separa una aplicación en tres componentes lógicos principales.  Estos s...

Programa en la nube sin instalar nada con repl.it

Programa en la nube sin instalar nada con repl.it

Repl.it es un proyecto de tres jóvenes emprendedores (Amjad, Haya, Maso), es un compilador en linea el cual te permite p...

¿Quieres llorar? conoce que es y como protegerse de WannaCry

¿Quieres llorar? conoce que es y como protegerse de WannaCry

Este 12 de Mayo de 2017 se produjo un ataque masivo mundial del ransomware WannaCry  el  que afecto a más de 200000 comp...

Reporte Padrón electoral con imágenes y Data Matrix

Reporte Padrón electoral con imágenes y Data Matrix

En este post diseñaremos un reporte de un padrón electoral con dos columnas que contendrá los certificados de sufragio e...

ODBC acces y php POO

ODBC acces y php POO

En este tuto crearemos una clase para conectarse con una base de datos Access y ademas se implementan dos metodos para r...

Proyecto Ascii Art (metodo de Black/white)

Proyecto Ascii Art (metodo de Black/white)

El Ascii Art o Arte Ascii, consiste en realizar dibujos con los caracteres ASCII (Código Americano Estándar de Intercamb...

Comparte lo que sabes

Categorias

Últimas entradas

Existe una gran cantidad de contenido sobre productividad, trucos, consejos y trabajo y más. Pero, ¿Qué pasa con esos mo...

En este post te enseño a usar una herramienta de Inteligencia Artificial para animar tus fotografias y esto completament...

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

Herramientas

Generador de Enlaces a Whatsapp