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

Código de Control v7 en JavaScript

Código de Control v7 en JavaScript

En esta oportunidad, se deja a disposición de la comunidad de programadores de Bolivia y también porque no, del que quie...

Google Blockly: Lenguaje de Programación Visual por bloques

Google Blockly: Lenguaje de Programación Visual por bloques

Blockly proyecto de Google for Education, es una biblioteca en JavaScript que agrega un editor de código visual a aplica...

Cifrado por desplazamiento o código de César

Cifrado por desplazamiento o código de César

El cifrado César, también conocido como cifrado por desplazamiento o código de César, es una de las técnicas de cifrado...

CRC32: Verificación de Redundancia Cíclica

CRC32: Verificación de Redundancia Cíclica

El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica  es una técnica utilizada para detect...

Node.js: Instalación, configuración y Hola Mundo

Node.js: Instalación, configuración y Hola Mundo

No se puede negar la popularidad que ganaron las aplicaciones de JavaScript en los últimos años, y las bibliotecas dispo...

Microservicio REST Java con Spark – Parte 1

Microservicio REST Java con Spark – Parte 1

En este y un segundo post desarrollaremos un microservicio java utilizando el framework Spark que implementara las funci...

Comparte lo que sabes

Categorias

Últimas entradas

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

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...

Herramientas

Generador de Enlaces a Whatsapp