Archivo de la categoría: S3

Carga de archivos en Amazon S3 desde NodeJS

nodejs   amazon

Hace muchísimo tiempo que no escribo nada aquí!, me consumió el mundo Enterprise 🙁 pero ya estoy libre!. Ahora a lo que nos compete. Esta guía no trata del funcionamiento de Amazon S3 ni de NodeJS, ojo con eso. Comenzamos!
Primero a través de nuestra terminal instalamos la librería para conectarnos a Amazon S3

npm install aws-sdk

Luego en nuestro archivo .js importamos la librería y la configuramos con nuestras credenciales de acceso. Para finalmente crear la instancia s3 que utilizaremos para accesar al S3 de Amazon.

var aws = require('aws-sdk');
aws.config.update({
    accessKeyId: 'XXXXXXXXXXXXXXXXXXXX',
    secretAccessKey: 'XXxxXxXXXxxxXxXXXxXXxxXXxxXXXxxxx'
});
var s3 = new aws.S3();

Ahora ya podemos listar nuestros buckets.

s3.listBuckets(function(err, data){
    for(var index in data.Buckets){
        var bucket = data.Buckets[index];
        console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
    }
});

Y insertar una nueva imagen. Para estos casos yo siempre mando la imagen en base64, entonces antes de guardarla en el S3 tengo que meterla a un Buffer

var image = req.body.image;
var buff = new Buffer(image.replace(/^data:image\/\w+;base64,/, ""),'base64');

Creo una variable con los parámetros para el putObject

var params = {
    Bucket: 'nombre_bucket',
    Key: 'nombre_imagen.png',
    Body: buff,
    ACL: 'public-read'
};

Un parámetro importante en la linea anterior es ACL, ‘public-read’ permite que la imagen pueda ser (como su nombre lo dice) pública.

s3.putObject(params, function(err, data){
    if(!err){
        console.log('load ok');
    }else{
        console.log('load fail');
    }
});

Y si es un archivo que tienen en su disco

var params = {Bucket: 'myBucket', Key: 'nombre_archivo.png'};
var file = require('fs').createWriteStream('/path/to/file.jpg');
s3.getObject(params).createReadStream().pipe(file);

Y eso es todo!
Comentarios y sugerencias son totalmente bienvenidos, saludos!

Carga de archivos en Amazon S3 con PHP

Amazon S3 es almacenamiento para Internet. Está diseñado para facilitar a los desarrolladores la informática a escala web.

Amazon S3 proporciona una sencilla interfaz de servicios web que puede utilizarse para almacenar y recuperar la cantidad de datos que desee, cuando desee, y desde cualquier parte de la web. Concede acceso a todos los desarrolladores a la misma infraestructura económica, altamente escalable, fiable, segura y rápida que utiliza Amazon para tener en funcionamiento su propia red internacional de sitios web. Este servicio tiene como fin maximizar las ventajas del escalado y trasladar estas ventajas a los desarrolladores (descripción por Amazon).

¿Qué necesitamos?
– Una cuenta en amazon S3
– Librería de S3 de Amazon que pueden descargar aquí: S3.php
– PHP

Para este ejemplo armaremos sólo 1 archivo, con el fin de simplificar la guía. Entonces comencemos!

[sourcecode language=”php”]vim index.php[/sourcecode]

Comenzamos importando la librería S3 q se especifica más arriba

[sourcecode language=”php”]
// Incluimos la clase de Amazon S3
if(!class_exists(‘S3’))require_once(‘S3.php’);
[/sourcecode]

Definimos las keys de acceso, estás están especificados en la información de nuestra cuenta en AWS

[sourcecode language=”php”]
// Informacion de acceso al AWT
if(!defined(‘awsAccessKey’)) define(‘awsAccessKey’, ‘XXXXXXXXXXXXXXXXX’);
if(!defined(‘awsSecretKey’)) define(‘awsSecretKey’, ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’);
[/sourcecode]

Instanciamos la clase S3 para hacer la conección con Amazon

[sourcecode language=”php”]
// Instanciamos la clase de S3
$s3 = new S3(awsAccessKey, awsSecretKey);
[/sourcecode]

Definimos nuestro bucket o almacen de archivos (previamente creado en AWS)

[sourcecode language=”php”]
// Nombre del Bucket en Amazon S3
$bucket = “XXXXXXX”;
[/sourcecode]

Luego con un formulario enviamos el archivo que deseamos cargar

[sourcecode language=”php”]// Cuendo presiono el boton Upload
if(isset($_POST[‘Submit’])){
// Recibo las variables por POST
$fileName = $_FILES[‘theFile’][‘name’];
$fileTempName = $_FILES[‘theFile’][‘tmp_name’];
// Creo un nuevo bucket de Amazon S3
$s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
// Muevo el archivo de su ruta temporal a su ruta definitiva
if($s3->putObjectFile($fileTempName, $bucket, $fileName, S3::ACL_PUBLIC_READ)) {
echo “Archivo subido correctamente.”;
}else{
echo “”No se pudo subir el archivo.”;
}
}[/sourcecode]

Creamos nuestro formulario

[sourcecode language=”php”]



[/sourcecode]

Listamos los archivos en nuestro Bucket en Amazon S3

[sourcecode language=”php”]

Lista de archivos en el S3

getBucket($bucket);
foreach ($contents as $file){

$fname = $file[‘name’];
$furl = “http://”.$bucket.”.s3.amazonaws.com/”.$fname;

// Imprimo el archivo que voy encontrando
echo “$fname
“;

}
?>
[/sourcecode]

Puedes descargar el archivo completo ejemplo_php_amazons3

Saludos y gracias por su visita!