Cargue archivos a AWS S3 con Node.js.

     

    Introducci贸n

    Muchos de los software y aplicaciones web que creamos hoy requieren alg煤n tipo de alojamiento de archivos: im谩genes, facturas, archivos de audio, etc. La forma tradicional de almacenar archivos era simplemente guardarlos en el disco duro del servidor. Sin embargo, existen limitaciones para guardar archivos en el disco duro del servidor, no poder escalar, tener que asignar espacio antes de su uso y precios mucho m谩s altos / inflexibles. Sin mencionar que si solicita una gran cantidad de im谩genes (potencialmente grandes), pueden ejercer presi贸n sobre el servidor.

    Para descargar los servidores, los desarrolladores comenzaron a alojar archivos con proveedores de almacenamiento como AWS S3, Almacenamiento en la nube de Googleetc.

    En este art铆culo, le mostraremos c贸mo escribir c贸digo Node.js para cargar archivos en S3.

    驴Qu茅 es S3?

    S3, o Simple Storage Service, es un servicio de almacenamiento en la nube proporcionado por Amazon Web Services (AWS). Con S3, no puede alojar ning煤n n煤mero de archivos y solo paga por lo que usa.

    S3 proporciona alojamiento multirregional a los clientes seg煤n su regi贸n y, por lo tanto, pueden servir los archivos solicitados r谩pidamente y sin demora.

    Establecer el entorno

    Credenciales de AWS

    Para comenzar, primero debe generar las credenciales de clave de acceso de seguridad de AWS. Para hacerlo, inicie sesi贸n en su Consola de administraci贸n de AWS.

    Haga clic en su nombre de usuario:

    Luego seleccione Claves de acceso -> Crear nueva clave de acceso:

    Luego puede copiar el ID de la clave de acceso y la Clave de acceso secreta de esta ventana o puede descargarla como .CSV archivo:

    Crear un dep贸sito de S3

    Ahora creemos un AWS S3 Bucket con el acceso adecuado. Podemos hacer esto usando la consola de administraci贸n de AWS o por Node.js.

    Para crear un bucket de S3 con la consola de administraci贸n, vaya al servicio S3 seleccion谩ndolo en el men煤 de servicio:

    Seleccione “Crear dep贸sito” e introduzca el nombre de su dep贸sito y la regi贸n en la que desea alojar su dep贸sito. Si ya sabe de qu茅 regi贸n vendr谩 la mayor铆a de los usuarios, tiene sentido elegir una regi贸n lo m谩s cercana posible a la suya. Esto asegurar谩 que los archivos del servidor se sirvan en un mejor per铆odo de tiempo.

    El nombre que elija para su dep贸sito debe tener un nombre 煤nico entre todos los usuarios de AWS, as铆 que pruebe con uno nuevo si el nombre no est谩 disponible:

    Siga el asistente y configure los permisos y otras configuraciones seg煤n sus necesidades.

    Para crear el dep贸sito con Node.js, primero necesitaremos configurar nuestro entorno de desarrollo.

    Entorno de desarrollo

    As铆 que ahora comencemos con nuestro ejemplo configurando un nuevo proyecto Node.js:

    $ npm init
    

    Para comenzar a utilizar cualquier servicio en la nube de AWS en Node.js, debemos instalar el AWS SDK (System Development Kit).

    Inst谩lelo usando su administrador de paquetes favorito; usaremos npm:

    $ npm i --save aws-sdk
    

    Implementaci贸n

    Crear un dep贸sito de S3

    Si ya ha creado un dep贸sito manualmente, puede omitir esta secci贸n. Pero si no es as铆, creemos un archivo, digamos, create-bucket.js en el directorio de su proyecto.

    Importar el aws-sdk biblioteca para acceder a su dep贸sito S3:

    const AWS = require('aws-sdk');
    

    Ahora, definamos tres constantes para el almacenamiento ID, SECRETy BUCKET_NAME. Estos se utilizan para identificar y acceder a nuestro dep贸sito:

    // Enter copied or downloaded access ID and secret key here
    const ID = '';
    const SECRET = '';
    
    // The name of the bucket that you have created
    const BUCKET_NAME = 'test-bucket';
    

    Ahora necesitamos iniciar la interfaz S3 ejecutando nuestras claves de acceso:

    const s3 = new AWS.S3({
        accessKeyId: ID,
        secretAccessKey: SECRET
    });
    

    Con la interfaz S3 iniciada correctamente, podemos seguir adelante y crear el dep贸sito:

    const params = {
        Bucket: BUCKET_NAME,
        CreateBucketConfiguration: {
            // Set your region here
            LocationConstraint: "eu-west-1"
        }
    };
    
    s3.createBucket(params, function(err, data) {
        if (err) console.log(err, err.stack);
        else console.log('Bucket Created Successfully', data.Location);
    });
    

    En este punto, podemos ejecutar el c贸digo y probar si el dep贸sito se crea en la nube:

    $ node create-bucket.js
    

    Si la ejecuci贸n del c贸digo es exitosa, deber铆a ver el mensaje de 茅xito, seguido de la direcci贸n del dep贸sito en el resultado:

    Bucket Created Successfully http://test-bucket-2415soig.s3.amazonaws.com/
    

    Puede visitar su panel S3 y asegurarse de que el dep贸sito est茅 creado:

    Para obtener una lista completa de regiones y otros par谩metros, consulte la documentaci贸n oficial.

    Carga de archivos

    En este punto, implementemos la funci贸n de carga de archivos. En un archivo nuevo, p. Ej. upload.js, importaci贸n del aws-sdk biblioteca para acceder a su bucket de S3 y al fs m贸dulo para leer archivos de su computadora:

    const fs = require('fs');
    const AWS = require('aws-sdk');
    

    Necesitamos definir tres constantes para el almacenamiento ID, SECRETy BUCKET_NAME e inicie el cliente S3 como lo hicimos antes.

    Ahora, creemos una funci贸n que acepte fileName par谩metro, indicando el archivo que queremos subir:

    const uploadFile = (fileName) => {
        // Read content from the file
        const fileContent = fs.readFileSync(fileName);
    
        // Setting up S3 upload parameters
        const params = {
            Bucket: BUCKET_NAME,
            Key: 'cat.jpg', // File name you want to save as in S3
            Body: fileContent
        };
    
        // Uploading files to the bucket
        s3.upload(params, function(err, data) {
            if (err) {
                throw err;
            }
            console.log(`File uploaded successfully. ${data.Location}`);
        });
    };
    

    Antes de cargar el archivo, necesitamos leer su contenido como un b煤fer. Despu茅s de leerlo, podemos definir los par谩metros necesarios para la carga de archivos, por ejemplo Bucket, Keyy Body.

    Adem谩s de estos tres par谩metros, existe una larga lista de otros par谩metros opcionales. Para tener una idea de lo que puede definir para un archivo durante la carga, aqu铆 hay algunos 煤tiles:

    • StorageClass: Defina la clase para la que desea almacenar el objeto. S3 est谩 destinado a proporcionar un servicio de archivos r谩pido. Pero cuando no se accede a los archivos con frecuencia, puede utilizar una clase de almacenamiento diferente. Por ejemplo, si tiene archivos que no son muy relevantes, puede almacenarlos en “S3 Glacier Storage” donde el precio es muy bajo en comparaci贸n con “S3 Standard Storage”. Pero tomar谩 m谩s tiempo acceder a esos archivos en caso de que lo necesite y est谩 cubierto por un acuerdo de nivel de servicio diferente.
    • ContentType: Establece el tipo de imagen MIME. El tipo predeterminado es “binary / octet-stream”. Un tipo MIME como “image / jpeg” ayudar谩 a los navegadores y otros clientes HTTP a identificar el tipo de archivo.
    • ContentLength: Establezca el tama帽o del cuerpo en bytes, lo que resulta 煤til si el tama帽o del cuerpo no se puede determinar autom谩ticamente.
    • ContentLanguage: Establezca este par谩metro para definir en qu茅 idioma est谩 el contenido. Esto tambi茅n ayudar谩 a los clientes HTTP a identificar o transferir el contenido.

    Don Bucket , usaremos nuestro nombre de dep贸sito, pero para el Key par谩metro agregaremos el nombre del archivo que queremos guardar como, y para Body par谩metro, usaremos fileContent.

    Una vez hecho esto, podemos subir cualquier archivo reenviando el nombre del archivo a la funci贸n:

    uploadFile('cat.jpg');
    

    Puede sustituir “cat.jpg” por un nombre de archivo en el mismo directorio que el c贸digo, la ruta de archivo relativa o la ruta de archivo completa.

    En este punto, podemos ejecutar el c贸digo y probar si funciona:

    $ node upload.js
    

    Si todo est谩 bien, deber铆a ver una salida similar a la que se muestra a continuaci贸n con un enlace a su archivo, que est谩 almacenado all铆. data.Location:

    File uploaded successfully. https://test-bucket-1242tsr.s3.ap-northeast-2.amazonaws.com/cat.jpg
    

    Si hay alg煤n error, tambi茅n deber铆a mostrarse en la consola.

    Adem谩s, puede ir a su dep贸sito en la Consola de administraci贸n de AWS y asegurarse de que el archivo est茅 cargado.

    Conclusi贸n

    Para descargar nuestros servidores de aplicaciones, los desarrolladores tienen una excelente opci贸n para alojar archivos utilizando proveedores de almacenamiento como AWS S3, Google Cloud Storage, etc. Hemos creado una aplicaci贸n Node.js muy simple que maneja la carga de archivos a S3 usando su interfaz a trav茅s del aws-sdk m贸dulo.

    Seg煤n sus necesidades, puede configurar el acceso p煤blico a su dep贸sito o archivos mientras usa la consola.

    Si te gusta jugar con el c贸digo, como de costumbre, puedes conseguirlo en GitHub y esta esencia.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *