{"id":27921,"date":"2021-05-28T14:11:00","date_gmt":"2021-05-28T11:11:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27921"},"modified":"2021-10-18T04:08:44","modified_gmt":"2021-10-18T01:08:44","slug":"como-fazer-upload-de-arquivo-para-s3-usando-o-sistema-de-arquivos-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-de-arquivo-para-s3-usando-o-sistema-de-arquivos-laravel\/","title":{"rendered":"Como fazer upload de arquivo para S3 usando o sistema de arquivos Laravel"},"content":{"rendered":"<p>Recentemente, publiquei um artigo <a href=\"https:\/\/themewp.inform.click\/pt-pt\/carregar-arquivos-para-o-amazon-s3-usando-aws-php-sdk\/\" title=\"Upload de arquivos para Amazon S3 usando AWS PHP SDK\" >Upload de arquivos para Amazon S3 usando AWS PHP SDK<\/a>. Um de nossos leitores perguntou como realizar opera\u00e7\u00f5es de upload de arquivo AWS S3 com o Laravel. Quando se trata do Laravel, precisamos seguir um caminho diferente em compara\u00e7\u00e3o com o PHP. Neste artigo, estudamos como fazer upload de um arquivo para o S3 usando um sistema de arquivos Laravel.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/master\/filesystem\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">O Laravel Filesystem<\/a> fornece diferentes drivers para trabalhar com o sistema de arquivos local, Amazon S3, Rackspace, etc. Esses drivers fornecem uma maneira conveniente e f\u00e1cil de enviar arquivos localmente ou na nuvem.<\/p>\n<p>Amazon S3 \u00e9 um servi\u00e7o popular para armazenamento de imagens, arquivos e documentos. Em segundo lugar, manter seus arquivos na nuvem economizar\u00e1 muita largura de banda para o seu site. Ele economiza espa\u00e7o de hospedagem e o desempenho da nuvem \u00e9 escalon\u00e1vel.<\/p>\n<p>Dito isso, vamos dar uma olhada em como fazer o upload de um arquivo para o S3 usando o sistema de arquivos Laravel.<\/p>\n<h3>Obtenha suas credenciais de seguran\u00e7a da AWS<\/h3>\n<p>Para come\u00e7ar a usar o S3, voc\u00ea deve ter uma conta no <a href=\"https:\/\/aws.amazon.com\/s3\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Web Services<\/a>. Assim que tiver, certifique-se de ativar o servi\u00e7o S3.<\/p>\n<p>Depois de ativar o servi\u00e7o S3, obtenha suas credenciais de seguran\u00e7a, que precisaremos na parte posterior do tutorial.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20443-6081f26f1f0bf.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20443-6081f26f1f0bf.png\" alt=\"Como fazer upload de arquivo para S3 usando o sistema de arquivos Laravel\" ><\/a><\/p>\n<h3>Configura\u00e7\u00e3o do driver S3 no Laravel<\/h3>\n<p>Como disse, irei usar o Sistema de Arquivos Laravel. Requer a configura\u00e7\u00e3o do driver S3. V\u00e1 at\u00e9 o seu editor e abra o arquivo <code>config\/filesystems.php<\/code>. Neste arquivo, voc\u00ea pode ver o driver definido para S3 em &#8216;discos&#8217;.<\/p>\n<p><strong>config \/ filesystems.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nreturn [\n\u00a0\n\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'disks' =&gt; [\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0's3' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 's3',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key' =&gt; env('AWS_ACCESS_KEY_ID'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; env('AWS_SECRET_ACCESS_KEY'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region' =&gt; env('AWS_DEFAULT_REGION'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'bucket' =&gt; env('AWS_BUCKET'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'url' =&gt; env('AWS_URL'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'endpoint' =&gt; env('AWS_ENDPOINT'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0],\n];<\/code><\/pre>\n<p>No c\u00f3digo acima, o Laravel usa o m\u00e9todo env() para definir os valores. Isso significa que voc\u00ea precisa definir essas constantes em seu <code>.env<\/code>arquivo. Voc\u00ea n\u00e3o precisa definir as constantes AWS_URL e AWS_ENDPOINT, pois n\u00e3o \u00e9 necess\u00e1rio para fazer upload de arquivos no bucket S3.<\/p>\n<pre><code>AWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nAWS_DEFAULT_REGION=\nAWS_BUCKET=<\/code><\/pre>\n<p>Adicione o valor a cada constante acima. Em seguida, abra o terminal no diret\u00f3rio raiz do seu projeto e execute o comando:<\/p>\n<pre><code>composer require league\/flysystem-aws-s3-v3 ~1.0<\/code><\/pre>\n<p>Este comando instalar\u00e1 a biblioteca necess\u00e1ria que chama a API AWS e faz as opera\u00e7\u00f5es na nuvem.<\/p>\n<h3>Carregar um arquivo para S3 no Laravel<\/h3>\n<p>Todos n\u00f3s definimos com a configura\u00e7\u00e3o b\u00e1sica. Agora podemos ir para a parte real do upload de arquivos. Vamos criar um formul\u00e1rio simples com entrada de arquivo e bot\u00e3o de envio.<\/p>\n<p>Adicione o c\u00f3digo abaixo em seu arquivo blade.<\/p>\n<pre><code>&lt;form action=\"{{ url('ROUTE_URL') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Substitua o marcador ROUTE_URL pelo seu trajeto real.<\/p>\n<p>O Laravel fornece uma <code>Storage<\/code>fachada que costumava interagir com os discos configurados. Em nosso caso, o disco \u00e9 S3. Adicione <code>Storage<\/code>fachada no controlador da seguinte forma:<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\n...\n...<\/code><\/pre>\n<p>Depois de incluir uma fachada, voc\u00ea pode fazer upload de arquivos no S3. Escreva o c\u00f3digo abaixo no seu m\u00e9todo que envia o arquivo no S3.<\/p>\n<pre><code>&lt;?php\n...\n...\npublic function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File to s3\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Storage::disk('s3')-&gt;put($filenametostore, fopen($request-&gt;file('profile_image'), 'r+'), 'public');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Store $filenametostore in the database\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, estou gerando um nome exclusivo para o arquivo e, em seguida, carrego-o no S3. Um usu\u00e1rio deve armazenar o nome do arquivo no banco de dados para uso posterior. Ao enviar um arquivo para o S3, passei o terceiro par\u00e2metro como &#8216;p\u00fablico&#8217;. Se voc\u00ea n\u00e3o quiser definir o arquivo como &#8216;p\u00fablico&#8217;, ignore este par\u00e2metro.<\/p>\n<p>O usu\u00e1rio pode obter o URL do arquivo enviado usando o c\u00f3digo:<\/p>\n<pre><code>$url = Storage::disk('s3')-&gt;url('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>Para excluir um arquivo do dep\u00f3sito S3, use o m\u00e9todo delete conforme mostrado abaixo.<\/p>\n<pre><code>Storage::disk('s3')-&gt;delete('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>\u00c9 tudo sobre como enviar um arquivo para o S3 usando o sistema de arquivos Laravel. Espero que voc\u00ea conhe\u00e7a o sistema disponibilizado pelo Laravel para intera\u00e7\u00e3o com o Amazon S3. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h3>Artigos relacionados<\/h3>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-e-compactar-imagens-no-laravel\/\" title=\"Um guia para fazer upload e compactar imagens no Laravel\">Um guia para fazer upload e compactar imagens no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-backup-do-aplicativo-laravel\/\" title=\"Como fazer backup do aplicativo Laravel\">Como fazer backup do aplicativo Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/faca-backup-do-aplicativo-laravel-no-dropbox\/\" title=\"Fa\u00e7a backup do aplicativo Laravel no Dropbox\">Fa\u00e7a backup do aplicativo Laravel no Dropbox<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quer saber como fazer o upload de um arquivo para o S3 do Laravel? Neste artigo, mostramos um guia passo a passo que explica o upload de um arquivo para o Amazon S3<\/p>\n","protected":false},"author":1,"featured_media":21654,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-27921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27921"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27921\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21654"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}