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!

2 comentarios en “Carga de archivos en Amazon S3 con PHP

  1. Vicente

    Hola Pablo,
    ¿habría alguna manera de subir o copiar archivos desde otro servidor externo, sin utilizar un input? Tener por ejemplo que subir varios archivos directamente desde una carpeta de un servidor externo.
    Gracias!

    Responder

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *