Definir o tempo de expiração no upload de arquivos com Laravel (S3 e outros drivers)

Laravel

Descubra

A ideia é simples:

Estou criando um grupo de pessoas que se interessam por startups criadas por pessoas como eu e você. Pessoas que acreditam em um projeto bacana que seja útil para seus usuários e não para o figurão que está investindo um 🌽 milhão nele...

O nome do projeto é Descubra mesmo. Se tivermos um nome melhor, aceito sugestões 😉

Acho que não preciso falar o clichê do "não gostamos de SPAM", né? É sério. A lista tem um objetivo direto e reto. Não preciso do seu e-mail pra te vender nada.

Definir o tempo de expiração dos arquivos é um dos passos essenciais para deixar seu site mais rápido.

Mas como fazer isso de forma automática quando fazemos o upload de novos arquivos? Ir e editar o cabeçalho Expires e Cache-control na mão é impensável. Para isso, você pode definir os parâmetros de cabeçalhos extra no método put() desta forma:

Storage::disk('s3')->put($destinationPathAndName, $fileToBeUploaded, ['CacheControl' => 'public, max-age=2592000','visibility' => 'public','etc' => '😉']);

Ou pode definir de maneira global e deixar seus métodos put() mais limpos:

's3' => [
    'driver'     => 's3',
    'key'        => env('AWS_KEY'),
    'secret'     => env('AWS_SECRET'),
    'region'     => env('AWS_REGION'),
    'bucket'     => env('AWS_BUCKET'),
    'visibility' => 'public',
    'options'    => [
                     'CacheControl' => 'public, max-age=2592000', // expira 30 dias depois do primeiro acesso do usuário
    ]
],

Você pode definir quaisquer cabeçalhos que achar necessários 👆.

Neste caso, defino o cabeçalho Cache-Control (CacheControl), dizendo que a imagem permanecerá no dispositivo do cliente por 2592000 segundos (30 dias) após o primeiro acesso.

O que significa o atributo public do Cache-Control?

🔥 Não confundir com o parâmetro public que torna o arquivo publicamente acessível a partir do Amazon S3.

A diferença entre public e private no Cache-Control é que o public permite que a imagem seja cacheada inclusive por proxies. Enquanto o private não permite o cache de proxy.

Você também pode pensar assim: tudo aquilo que é público (como uma logo), deixa public. Se for um sistema fechado com login e senha, e o usuário subiu um arquivo pessoal, deixa private ;)

Veja mais sobre conceitos do Expires e Cache-Control aqui: https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13

Voltar
Compartilhe: