Enviando arquivos para o AWS S3 via PHP

Então você tem uma aplicação da web, site ou jogo com um back-end em PHP.
Um dos seus casos de uso é salvar arquivos em disco. Você provavelmente deve usar um serviço de armazenamento em vez de salvar e servir arquivos do seu servidor.
Obviamente, se você pesquisar um pouco, vai encontrar o Amazon Web Services Simple Storage ou no AWS S3.
O preço é bom, a empresa é sólida e fácil de configurar por meio do console do aplicativo.
Mas agora, como você vincula isso ao seu back-end PHP?

Você encontra este SDK bonito, completo e enorme, fornecido pela Amazon: https://github.com/aws/aws-sdk-php.

Espere um pouco, você precisa instalar o mundo para simplesmente enviar um arquivo ao S3?

 

 

 

 

 

 

Passo 1 – Copie o arquivo

Basta copiar o S3.php no seu repositório. Bem, na verdade, a versão no repo de Donovan está desatualizada e não usa o algoritmo certo para assinar solicitações. Felizmente, o Rack Lin fez uma solicitação de recebimento com a alteração correta. No entanto, ele não foi mesclado (o Donavan não tem tempo para manter o repo). Rack Lin teve a gentileza de manter o garfo. Então copie o S3.php do seu repositório: https://github.com/racklin/amazon-s3-php-class.

 

Passo 2 – Credenciais para a AWS
Crie um arquivo php com as credenciais necessárias, juntamente com a sua região e o nome do bucket. Aqui está uma maneira simples de fazer isso.

if (ENVIRONMENT == 'production') 
{ 
   define('AWS_S3_KEY', 'XXXX'); 
   define('AWS_S3_SECRET', 'XXXX'); 
   define('AWS_S3_REGION', 'us-east-2'); 
   define('AWS_S3_BUCKET', 'bucket'); 
   define('AWS_S3_URL', 'http://s3.'.AWS_S3_REGION.'.amazonaws.com/'.AWS_S3_BUCKET.'/'); 
}

 

Passo 3 – O código a ser enviado à AWS
Salvar na AWS é muito simples. Donavan forneceu métodos estáticos simples para permitir isso. No caso de a AWS não estar disponível (ou seja, ambiente de desenvolvimento), recorro ao salvamento em um arquivo

$tmpfile = $_FILES['file']['tmp_name']; 
$file = $_FILES['file']['name']; 
if (defined('AWS_S3_URL')) 
{ 
   // Persist to AWS S3 and delete uploaded file require_once('S3.php'); 
   S3::setAuth(AWS_S3_KEY, AWS_S3_SECRET); 
   S3::setRegion(AWS_S3_REGION); 
   S3::setSignatureVersion('v4'); 
   S3::putObject(S3::inputFile($tmpfile), AWS_S3_BUCKET, 'path/in/bucket/'.$file, S3::ACL_PUBLIC_READ); 
   
   unlink($tmpfile); 
} 
else 
{ 
   // Persist to disk $path = 'path/to/user/files/'.$file; 
   move_uploaded_file($tmpfile, $path); 
}

Então é isso. Simples assim.

 

Comentários

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *