
A grande maioria das aplicações ainda não faz os uploads para o S3, e este post faz parte da série que tenta mostrar a forma mais fácil possível de implementar isso em diferentes linguagens e tecnologias. Nele vamos mostrar o upload mais simples possível em PHP.
Para a versão TL;DR, simplesmente faça o fork do repositório e experimente localmente.
Para usar esta implementação, precisamos obter o SDK Php da Amazon, e você pode obtê-lo facilmente via Composer (Não sabe o que é composer? Recomendo parar tudo o que está fazendo e dedicar 60 minutos para leitura deste site), criando o arquivo composer.json na raiz do projeto com o seguinte conteúdo:
{
"require": {
"aws/aws-sdk-php": "2.*"
}
}
Após a criação e edição do arquivo de configuração, precisamos baixar as dependências, para isto rodamos o comando:
php composer.phar install
Note que foi criada uma pasta “vendor” com os pacotes do AWS (na SDK da AWS vem algumas libs PHP juntas como o Guzzle e o Event Dispatcher do Symfony).
Pronto, resolvido as dependências, agora ficou muito fácil, no projeto há um formulário bem simples com encoding multipart/form-data (arquivo index.php), que submete para outro arquivo (upload.php) que recebe os dados e encaminha diretamente para o Amazon S3, sem passar pelo file system local. Estamos usando um bucket pré-existente, mas também poderia ser feita a criação de um novo bucket pela API.
Portanto, inicialmente cria-se o arquivo index.php contendo o formulário HTML:
<?php
session_start();
require "vendor/autoload.php";
?>
<!DOCTYPE html>
<html>
<head>
<title>Example Upload to S3 in PHP</title>
</head>
<body>
<?php
if (isset($_SESSION['msg'])):
echo $_SESSION['msg'];
endif;
?>
<h1>PHP Upload file to S3</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" value="Enviar"/>
</body>
</html>
Depois, é a vez de criar o arquivo upload.php, que será responsável por receber o POST com os dados e persistir diretamente no Amazon S3, observe que você precisará colocar o ACCESS_KEY e o SECRET_KEY da sua conta da AWS.
<?php
define(ACCESS_KEY, "");
define(SECRET_KEY, "");
session_start();
require "vendor/autoload.php";
use Aws\S3\S3Client;
try {
// dispara exceção caso não tenha dados enviados
if (!isset($_FILES['file'])) {
throw new Exception("File not uploaded", 1);
}
// cria o objeto do cliente, necessita passar as credenciais da AWS
$clientS3 = S3Client::factory(array(
'key' => ACCESS_KEY,
'secret' => SECRET_KEY
));
// método putObject envia os dados pro bucket selecionado (no caso, teste-marcelo
$response = $clientS3->putObject(array(
'Bucket' => "teste-marcelo",
'Key' => $_FILES['file']['name'],
'SourceFile' => $_FILES['file']['tmp_name'],
));
$_SESSION['msg'] = "Objeto postado com sucesso, endereco <a href='{$response['ObjectURL']}'>{$response['ObjectURL']}</a>";
header("location: index.php");
} catch(Exception $e) {
echo "Erro > {$e->getMessage()}";
}
?>
No final do upload, obtemos da resposta a URL do novo arquivo no Amazon S3 e encaminhamos para os usuários. Pronto, seus arquivos agora estão sendo enviados para o S3 de forma bem simples e eficiente!
Quem quiser pegar o código fonte, está disponível no meu github.
Gostou do conteúdo? Tem alguma dúvida? Entre em contato com nossos Especialistas Mandic Cloud, ficamos felizes em ajudá-lo.