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