Do not speak Portuguese? Translate this site with Google or Bing Translator
Usando Object Storage ou S3

Posted on: April 29, 2019 12:18 PM

Posted by: Renato

Categories: PHP Laravel aws s3 storage

Views: 1626

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:

```

FILESYSTEM_DRIVER=s3

AWS_ACCESS_KEY_ID=0000
AWS_SECRET_ACCESS_KEY=00000
AWS_DEFAULT_REGION=us-east-2
AWS_REGION=us-east-2
AWS_BUCKET=audio-job

 

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

 

$ 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


0

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email