Posted on: April 29, 2019 12:18 PM
Posted by: Renato
Views: 1626
Estou postando este artigo e documentação, pois encontrei dificuldade em configurar Object Storage da LOCAWEB.
Então testei S3 da 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.
- 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
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"; }
- https://s3.console.aws.amazon.com
- https://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html
- http://docs.ceph.com/docs/master/radosgw/s3/php/
- https://gist.github.com/lucenarenato/3d069df0f7516402d038186957eb01bf
- https://gist.github.com/lucenarenato/83a9004de49a686b6b3ec6d4d4c7a978
Renato Lucena - 2019 - http://renatolucena.net
Donate to Site
Renato
Developer