Laravel Storage: upload de arquivos de forma simples e correta
Thiago Alves • 18/04/2020
Em qualquer sistema é muito comum que haja alguma manipulação de arquivos. Desde fotos para um site até relatórios confidenciais em PDF.
A forma como o Laravel trabalha essa questão é incrivelmente simples. Basicamente, se você usar a estrutura que o framework disponibiliza, dificilmente terá problemas com isso.
Criei um projeto para usarmos como exemplo. Segue o link do repositório: thiagoalves-dev/laravel-storage-example.
Fiz um HTML bem simples para simular um formulário onde será feito o upload de uma foto de perfil de usuário.
<!-- home.blade.php -->
<form action="/store" method="post" enctype="multipart/form-data">
@csrf
<input name="profile_image" type="file">
<button type="submit">Submit</button>
</form>
Salvando o arquivo como privado
Neste caso a imagem só ficará acessível implementando uma funcionalidade que permita isso. Seja de exibição ou download.
// HomeController
public function store(Request $request)
{
$request->file('profile_image')->store('/');
}
Salvando o arquivo como público
Neste caso a imagem ficará acessível a qualquer um, basta saber como acessá-la.
// HomeController
public function store(Request $request)
{
$request->file('profile_image')->store('/', 'public');
}
O Laravel já vem com a pasta storage/app/public
configurada.
// config/filesystems.php
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
]
É preciso criar um symlink dentro do diretório público do Laravel para tornar seus arquivos públicos acessíveis pela URL do navegador.
Use o seguinte comando: php artisan storage:link
.
Resultado final:
Nos vemos em breve!
Thiago Alves
Comente abaixo o que você achou deste post, se ficou com alguma dúvida ou se gostaria de sugerir algum assunto.