Cómo subir archivos a Amazon S3 mediante PHP

Si tu sitio web cuenta con muchas imágenes y estás tanteando a Amazon S3 para almacenar las imágenes allí y así reducir el tiempo de carga y el uso de ancho de banda, has venido al lugar indicado. Amazon Simple Storage Service (Amazon S3) es un popular servicio web que te proporciona almacenamiemto altamente escalable, duradero y, sobre todo, seguro. Es muy sencillo de utilizar y con él podrás almacenar y recuperar datos desde cualquier lugar y en cualquier momento. Asi que, en este tutorial aprenderás a subir archivos a Amazon S3 utilizando PHP.

Habiendo dicho todo esto, vamos a empezar ya con la programación. Para este ejemplo utilizaremos la siguiente estructura de archivos.

  • index.php
  • functions.php
  • config.php
  • s3.php

Créate una cuenta en Amazon S3

Antes que nada, lo primero que tienes que hacer es crearte una cuenta en Amazon S3 y obtener tu bucket name y las access keys que después utilizaremos para subir archivos.

Configura la información de S3

Una vez tengamos los datos que te he comentado en el paso anterior, tendremos que definir nuestros datos de Amazon S3 en el fichero config.php. Datos como el bucket name, la access key y la secret key. También tendremos que incluir la librería de Amazon S3 (s3.php) el cual gestionará la subida de archivos al servidor de Amazon.

<?php
// Bucket Name
$bucket="noprog_demo";
require_once('S3.php');
//AWS access info
$awsAccessKey = 'Access Key';
$awsSecretKey = 'Security Key';
//instantiate the class
$s3 = new S3($awsAccessKey, $awsSecretKey);
$s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
?>

Crea el formulario de subida de imágenes

Ahora en index.php, crea el formulario mediante el cual podremos subir imágenes.

<div class="container">
<h2>Amazon S3 File Upload using PHP</h2>
<br>
<form action="" method='post' enctype="multipart/form-data">
<h3>Upload Image</h3><br/>
<input type='file' name='upload_file'/>
<input type='submit' name="upload_files" value='Upload'/>
</form>
<?php
if($file_upload_message) {
echo $file_upload_message;
}
?>
</div>

Gestionar la subida de ficheros a Amazon S3

Ahora finalmente gestionaremos la subida de imágenes al servidor de Amazon S3 las cuales se suben a través del formulario que hemos creado antes. Vamos a incluir el fichero functions.php para utilizar la función getFileExtension() y así obtener la extensión de archivo y comprobar si el fichero es una imagen. También incluiremos s3.php para usar el objeto S3 y así subir el archivo utilizando la función de S3 putObjectFile() y mostrar el mensaje del estado de la subida.

<?php
include('functions.php');
$file_upload_message = '';
if(isset($_POST["upload_files"])) {
$file_name = $_FILES['upload_file']['name'];
$file_size = $_FILES['upload_file']['size'];
$tmp_file = $_FILES['upload_file']['tmp_name'];
$valid_file_formats = array("jpg", "png", "gif", "bmp","jpeg","PNG","JPG","JPEG","GIF","BMP");
$file_extension = getFileExtension($file_name);
if($file_name) {
if(in_array($file_extension,$valid_file_formats)) {
if($file_size < (1024*1024)) {
include('config.php');
$new_image_name = time().".".$file_extension;
if($s3->putObjectFile($tmp_file, $bucket , $new_image_name, S3::ACL_PUBLIC_READ)) {
$file_upload_message = "File Uploaded Successfully to amazon S3.<br><br>";
$uploaded_file_path='http://'.$bucket.'.s3.amazonaws.com/'.$new_image_name;
$file_upload_message .= '<b>Upload File URL:</b>'.$uploaded_file_path."<br/>";
$file_upload_message .= "<img src='$uploaded_file_path'/>";
} else {
$file_upload_message = "<br>File upload to amazon s3 failed!. Please try again.";
}
} else {
$file_upload_message = "<br>Maximum allowed image upload size is 1 MB.";
}
} else {
$file_upload_message = "<br>This file format is not allowed, please upload only image file.";
}
} else {
$file_upload_message = "<br>Please select image file to upload.";
}
}
?>

Fuente: phpzag.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP