Usando Object Storage ou S3

Estou postando este artigo e documentação, pois encontrei dificuldade em configurar Object Storage da LOCAWEB.

Resultado de imagem para locaweb

Então testei S3 da AWS.

Resultado de imagem para aws

Salvando seus arquivos no Amazon S3 com Laravel

Quando construimos sistemas web, normalmente nos deparamos com um problema bastante comum, onde salvar os arquivos estáticos? Usamos o banco de dados? Salvamos no próprio servidor de aplicação? e se fizermos isso como fazer backup desses dados.

Para essa questão podemos pensar em armazenamento em nuvem, como vantagem temos servidores robustos com ótimo tempo de resposta, mas entramos em outro questionamento, é complicado implementar aplicações nesse nível ?

O objetivo deste post é mostrar como o Laravel Framework implementa as api’s de grandes servidores de arquivos tornando muito fácil sua integração, resolvendo assim nossos dilemas, para isso vamos usar como exemplo neste tutorial o Amazon S3, vamos lá?

Configurações

  • Para este tutorial estamos partindo do princípio que você já possui uma instalação do Laravel.

Rode o comando:

– composer require league/flysystem-aws-s3-v3

Vá até config/filesystems.php ou use o arquivo .env usaremos o .env porfacilitar o processo de desenvolvimento.

  1. Crie uma conta no S3 aqui

2. Acesse o menu de usuário, depois clique em My Security Credentials.

3. Após isso vá até o menu “Chaves de acesso (ID da chave de acesso e a chave de acesso secreta)” e aperte em “Criar nova chave de acesso

4. Copie as chaves para arquivo .env

5. O próximo passo é ir no console do aws e clicar em “Services>S3” e logo após criar um bucket.

Seu arquivo .env deve ficar assim:

Como usar o drive do S3 no Laravel

  • Fazendo upload de arquivos
use Illuminate\Support\Facades\Storage;Storage::put('meutexto.txt', 'Texto de Teste');
  • Fazendo download dos arquivos
use Illuminate\Support\Facades\Storage;return Storage::download('meutexto.txt');
  • Obtendo metadados
use Illuminate\Support\Facades\Storage;

Storage::size('meutexto.txt');
Storage::lastModified('meutexto.txt');
  • Obtendo Urls dos arquivos
use Illuminate\Support\Facades\Storage;Storage::url('meutexto.txt');

Exemplo usando um controller arquivos que vem apartir de um formulário

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class FotoController extends Controller{    /**     * Update the avatar for the user.     *     * @param  Request  $request     * @return Response     */    public function store(Request $request)    {        $path = $request->file('foto')->store('fotos');        return $path;    }}

Laravel juntamente com o flysystem facilitam bastante nossa vida com essa implementação completa para lidarmos com arquivos em nossas aplicações.

Readme.md Abaixo:

FileSystems.php

$ composer install aws/aws-sdk-php
$ composer require league/flysystem-aws-s3-v3

Uma abordagem mais segura é: (A safer approach is:)

  • 1-AWS Console -> IAM -> Policies -> Create policy
  • 2-Service = S3
  • 3-Actions = (only the minimum required, e.g. List and Read)
  • 4-Resources -> Specific -> bucket -> Add ARN (put the ARN of only the buckets needed)
  • 5-Resources -> Specific -> object -> check Any or put the ARN’s of specific objects
  • 6-Review and Save to create policy
  • 7-AWS Console -> IAM -> Users -> Add user
  • 8-Access type -> check “Programmatic access” only
  • 9-Next:Permissions -> Attach existing policies directly
  • 10-Search and select your newly created policy
  • 11-Review and save to create user
  • Desta forma, você terá um usuário com apenas o acesso necessário.

AWS

's3' => [
         'driver' => 's3',
         'key' => 'AKIAQS42OR6PYFOITQFY',
         'secret' => '000000000+AeaqNLB2',
         'region' => 'us-east-1',
         'bucket' => 'storage_teste',
     ],

Locaweb Object Storage

Creating a Connection PHP

<?php

use Aws\S3\S3Client;

define('AWS_KEY', 'place access key here');
define('AWS_SECRET_KEY', 'place secret key here');
$ENDPOINT = 'http://objects.dreamhost.com';

// require the amazon sdk from your composer vendor dir
require __DIR__.'/vendor/autoload.php';

// Instantiate the S3 class and point it at the desired host
$client = new S3Client([
    'region' => '',
    'version' => '2006-03-01',
    'endpoint' => $ENDPOINT,
    'credentials' => [
        'key' => AWS_KEY,
        'secret' => AWS_SECRET_KEY
    ],
    // Set the S3 class to use objects.dreamhost.com/bucket
    // instead of bucket.objects.dreamhost.com
    'use_path_style_endpoint' => true
]);

Object Storage Locaweb

      's3' => [
         'driver' => 's3',
         'version' => 'latest',
         'endpoint' => 'https://lss.locawebcorp.com.br',
         'account' => 'Locaweb CORP Object Storage',
         'key'    => '53RBB2CGBA2EJ21GDZ7A',
         'secret' => '00000000000000000000',
         'region' => '',
         'bucket' => 'storage_teste',
         'Body'   => 'Hello, world!',
         'ACL'    => 'public-read',
      ],

php

<?php
// Include the AWS SDK using the Composer autoloader.
require '/home/berman/vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'gps-photo.org';
$keyname = 'my-object-key';
// Instantiate the client.
$s3 = S3Client::factory(array(
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2006-03-01'
));
try {
    // Upload data.
    $result = $s3->putObject(array(
        'Bucket' => $bucket,
        'Key'    => "myFolder/$keyname",
        'Body'   => 'Hello, world!',
        'ACL'    => 'public-read'
    ));
    // Print the URL to the object.
    echo $result['ObjectURL'] . "\n";
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

Renato Lucena – 2019 – http://renatolucena.net

Renato Lucena

Developer PHP, Laravel. Goiania-GO https://www.linkedin.com/in/renato-de-oliveira-lucena-33777133/

Você pode gostar...