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.
Luego presionamos el botón Crear Bucket, le damos un nombre para nuestro ejemplo usaremos “tutor-programacion-bucket” y presionamos Crear.
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.
Seleccionamos la opción crear una 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:
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:
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
Nunca declarste el objeto s3
ResponderEliminar