<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Charley Kevin</title>
    <description>The latest articles on Forem by Charley Kevin (@charleykevin).</description>
    <link>https://forem.com/charleykevin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1106438%2Fecf22712-68c8-409f-947f-469c4cadc334.jpeg</url>
      <title>Forem: Charley Kevin</title>
      <link>https://forem.com/charleykevin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/charleykevin"/>
    <language>en</language>
    <item>
      <title>Laravel Upload de Arquivos: Salvar arquivo no Storage</title>
      <dc:creator>Charley Kevin</dc:creator>
      <pubDate>Thu, 22 Jun 2023 13:49:40 +0000</pubDate>
      <link>https://forem.com/charleykevin/laravel-upload-de-arquivos-salvar-arquivo-no-storage-4mh8</link>
      <guid>https://forem.com/charleykevin/laravel-upload-de-arquivos-salvar-arquivo-no-storage-4mh8</guid>
      <description>&lt;p&gt;Existem algumas opções para salvar o arquivo no storage e o caminho da pasta no banco de dados. Nesse tutorial irei demostrar salvando apenas o nome do arquivo e criando um armazenamento separado a qual considero a forma mais prática e flexível.&lt;/p&gt;




&lt;p&gt;Antes de iniciar você deve saber qual tabela deseja salvar o caminho da imagem e cria-la. No nosso caso iremos salva o avatar do usuário, assim adicionei a coluna avatar no Model User.&lt;/p&gt;

&lt;p&gt;Configurações iniciais realizadas iremos criar um espaço novo no storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;config/filesystems.php:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return [

    // ...

    'disks' =&amp;gt; [

        // ...

        'avatars' =&amp;gt; [
            'driver' =&amp;gt; 'local',
            'root' =&amp;gt; storage_path('app/public/avatars'),
            'url' =&amp;gt; env('APP_URL').'/storage/avatars',
            'visibility' =&amp;gt; 'public',
            'throw' =&amp;gt; false,
        ],

    ],

    // ...

];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim, quando for salvar o arquivo faça da seguinte forma&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app/Http/Controllers/Auth/RegisteredUserController.php:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class RegisteredUserController extends Controller
{
    // ...

    public function store(Request $request): RedirectResponse
    {
        $request-&amp;gt;validate([
            'name'     =&amp;gt; ['required', 'string', 'max:255'],
            'email'    =&amp;gt; ['required', 'string', 'email',
                          'max:255', 'unique:'.User::class],
            'password' =&amp;gt; ['required', 'confirmed',
                           Rules\Password::defaults()],
            'avatar'   =&amp;gt; ['nullable', 'image'],
        ]);

        if ($request-&amp;gt;hasFile('avatar')) { 
            $avatar = $request-&amp;gt;file('avatar')
                              -&amp;gt;store(options: 'avatars');
        } 

        $user = User::create([
            'name' =&amp;gt; $request-&amp;gt;name,
            'email' =&amp;gt; $request-&amp;gt;email,
            'password' =&amp;gt; Hash::make($request-&amp;gt;password),
            'avatar' =&amp;gt; $avatar ?? null, 
        ]);

        // ...
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo Blade use o método abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src="{{ Storage::disk('avatars')-&amp;gt;url(Auth::user()-&amp;gt;avatar) }}" 
     alt="{{ Auth::user()-&amp;gt;name }}"
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E caso mude a hospedagem das imagens para um S3, por exemplo. Seria muito prático essa mudança, mudando apenas o disk que salva e mostra o arquivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src="{{ Storage::disk('s3')-&amp;gt;temporaryUrl(Auth::user()-&amp;gt;avatar, now()-&amp;gt;addMinutes(5)) }}"
     alt="{{ Auth::user()-&amp;gt;name }}"
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Fonte: &lt;a href="https://laraveldaily.com/post/laravel-file-uploads-save-filename-database-folder-url?utm_content=buffer014d6&amp;amp;utm_medium=social&amp;amp;utm_source=linkedin.com&amp;amp;utm_campaign=buffer"&gt;https://laraveldaily.com/post/laravel-file-uploads-save-filename-database-folder-url?utm_content=buffer014d6&amp;amp;utm_medium=social&amp;amp;utm_source=linkedin.com&amp;amp;utm_campaign=buffer&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
