Subir archivos a AWS-S3 desde Node

Veremos como podemos subir archivos al servicio de almacenamiento en la nube proporcionado por Amazon, el mismo es llamado S3, utilizaremos el lenguaje de programación Node para crear un pequeño ejemplo de como subir un archivo que se encuentre en el servidor.

Antes que nada primero debemos crear el Bucket S3, esto no es nada mas que nuestro espacio de almacenamiento, para hacerlo vamos a la consola AWS y seleccionamos el servicio S3.

Almacenamiento AWS S3

Luego presionamos el botón Crear Bucket, le damos un nombre para nuestro ejemplo usaremos “tutor-programacion-bucket” y presionamos Crear.

Crear Bucket AWS S3

Lo siguiente que necesitamos será crear un par de claves para poder conectarnos al servicio, para esto vamos a la consola, nombre de cuenta | Mis credenciales de seguridad.

Credenciales AWS

Seleccionamos la opción crear una clave de acceso.

AWS clave de acceso

Con esto tenemos AWS preparado.

Crear aplicacion Node AWS S3

Primero el paquete aws-sdk que nos permitirá conectarnos al servicio de almacenamiento en la nube de Amazon.

npm install aws-sdk --save

Lo siguiente es configurar el entorno AWS para lo cual deberemos indicar las claves de acceso que hemos creado anteriormente, en accessKeyId establecemos el ID de la clave de acceso y en secretAccessKey la clave de acceso secreta.

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

//cconfigurar AWS con las claves de acceso
AWS.config.update({
    accessKeyId: "xxxxxxxxxxxxxxx",
    secretAccessKey: "xxxxxxxxxxx",
    region: 'us-east-1' 
});

Lo que resta es subir el archivo, para nuestro caso usaremos un archivo de texto que se encuentra en la carpeta data, el método que usamos para esto es upload(...).

//configuring parameters
var params = {
  Bucket : 'tutor-programacion-bucket',
  Body   : fs.createReadStream(filePath),
  Key    : "folder/" + Date.now() + "_" + path.basename(filePath)
};

s3.upload(params, function (err, data) {
  //handle error
  if (err) {
    console.log("Error", err);
  }

  //success
  if (data) {
    console.log("Uploaded in:", data.Location);
  }
});

Como podemos ver primero creamos una seria de parámetros, en Bucket indicas el nombre del espacio de almacenamiento en el cual deseas guardar el archivo, Body establece el contenido y Key indica la ruta con nombre único en donde guardamos el archivo.

Al ejecutar tendremos el siguiente resultado:

Node subir archivo a S3

Con esto tenemos el archivo en la nube, solo debemos tener presente que el acceso al archivo en privado, si deseamos que el archivo sea subido como público para que cualquier persona lo pueda ver o descargar debemos hacer el siguiente cambio.

Agregamos ACL a los parámetros con el valor 'public-read' de la siguiente manera:

var params = {
  Bucket : 'tutor-programacion-bucket',
  Body   : fs.createReadStream(filePath),
  Key    : "folder/" + Date.now() + "_" + path.basename(filePath),
  ACL    : 'public-read'
};

Antes de ejecutar debemos también cambiar la configuración del AWS S3 para permitir este comportamiento, para ello hacemos lo siguiente:

AWS configurar acceso público

Vamos a la consola AWS S3, seleccionamos el bucket, damos clic en permisos luego en el cuadro inferior presionamos editar y desactivamos las opciones que podemos ver en la imagen superior.

Descargar código: Node_S3.zip

Comentarios

Publicar un comentario

Temas relacionados

Entradas populares de este blog

tkinter Grid

Controles y Contenedores JavaFX 8 - I

Conectar SQL Server con Java

JFileChooser Java Swing