Blog e Artigos Tecnologia

Blog e Artigos Tecnologia

Who am I?

Sou ūüíĽ Desenvolvedor PHP | Laravel #Fullstack #Dev #DevOps #Laravel #PHP #lucena


What I write about


Recent Posts

Usando Object Storage ou S3

AWS, Object Storage Locaweb, Laravel, Lumen - filesystems.php

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