{"id":28545,"date":"2021-05-28T14:37:00","date_gmt":"2021-05-28T11:37:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28545"},"modified":"2021-10-17T16:41:27","modified_gmt":"2021-10-17T13:41:27","slug":"como-cargar-un-archivo-a-s3-usando-el-sistema-de-archivos-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-cargar-un-archivo-a-s3-usando-el-sistema-de-archivos-laravel\/","title":{"rendered":"C\u00f3mo cargar un archivo a S3 usando el sistema de archivos Laravel"},"content":{"rendered":"<p>Recientemente publiqu\u00e9 un art\u00edculo <a href=\"https:\/\/themewp.inform.click\/es\/cargar-archivos-en-amazon-s3-mediante-aws-php-sdk\/\" title=\"Cargar archivos en Amazon S3 usando AWS PHP SDK\" >Cargar archivos en Amazon S3 usando AWS PHP SDK<\/a>. Uno de nuestros lectores pregunt\u00f3 c\u00f3mo realizar operaciones de carga de archivos de AWS S3 con Laravel. Cuando se trata de Laravel, debemos seguir una pista diferente en comparaci\u00f3n con PHP. En este art\u00edculo, estudiamos c\u00f3mo cargar un archivo en S3 usando un sistema de archivos Laravel.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/master\/filesystem\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Filesystem<\/a> proporciona diferentes controladores para trabajar con el sistema de archivos local, Amazon S3, Rackspace, etc. Estos controladores brindan una manera conveniente y f\u00e1cil de cargar archivos localmente o en la nube.<\/p>\n<p>Amazon S3 es un servicio popular para almacenar im\u00e1genes, archivos y documentos. En segundo lugar, mantener sus archivos en la nube ahorrar\u00e1 mucho ancho de banda para su sitio web. Ahorra espacio de alojamiento y el rendimiento de la nube es escalable.<\/p>\n<p>Habiendo dicho eso, echemos un vistazo a c\u00f3mo subir un archivo a S3 usando el sistema de archivos de Laravel.<\/p>\n<h3>Obtenga sus credenciales de seguridad de AWS<\/h3>\n<p>Para comenzar con S3, debe tener una cuenta en <a href=\"https:\/\/aws.amazon.com\/s3\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Web Services<\/a>. Una vez que lo tenga aseg\u00farese de activar el servicio S3.<\/p>\n<p>Despu\u00e9s de activar el servicio S3, obtenga sus credenciales de seguridad que necesitaremos en la parte posterior del 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=\"C\u00f3mo cargar un archivo a S3 usando el sistema de archivos Laravel\" ><\/a><\/p>\n<h3>Configuraci\u00f3n del controlador S3 en Laravel<\/h3>\n<p>Como dije, voy a usar el sistema de archivos Laravel. Requiere configurar el controlador S3. Dir\u00edgete a tu editor y abre el archivo <code>config\/filesystems.php<\/code>. En este archivo, puede ver el controlador definido para S3 en &#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>En el c\u00f3digo anterior, Laravel usa el m\u00e9todo env() para establecer los valores. Eso significa que necesita definir estas constantes en su <code>.env<\/code>archivo. No es necesario que defina las constantes AWS_URL y AWS_ENDPOINT, ya que no es necesario para cargar archivos en el bucket de S3.<\/p>\n<pre><code>AWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nAWS_DEFAULT_REGION=\nAWS_BUCKET=<\/code><\/pre>\n<p>Suma el valor a cada constante anterior. A continuaci\u00f3n, abra la terminal en el directorio ra\u00edz de su proyecto y ejecute el comando:<\/p>\n<pre><code>composer require league\/flysystem-aws-s3-v3 ~1.0<\/code><\/pre>\n<p>Este comando instalar\u00e1 la biblioteca requerida que llama a la API de AWS y realiza las operaciones en la nube.<\/p>\n<h3>Subir un archivo a S3 en Laravel<\/h3>\n<p>Todos nos pusimos con la configuraci\u00f3n b\u00e1sica. Ahora podemos ir a la parte real de la carga de archivos. Creemos un formulario simple con entrada de archivo y bot\u00f3n de env\u00edo.<\/p>\n<p>Agregue el siguiente c\u00f3digo en su archivo 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>Reemplaza el marcador de posici\u00f3n ROUTE_URL con tu ruta real.<\/p>\n<p>Laravel da una <code>Storage<\/code>fachada que sol\u00eda interactuar con los discos configurados. En nuestro caso, el disco es S3. Agregue <code>Storage<\/code>fachada en el controlador de la siguiente manera:<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\n...\n...<\/code><\/pre>\n<p>Despu\u00e9s de incluir una fachada, puede cargar archivos en S3. Escriba el c\u00f3digo a continuaci\u00f3n en su m\u00e9todo que env\u00eda el archivo en 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>En el c\u00f3digo anterior, estoy generando un nombre \u00fanico para el archivo y luego lo subo a S3. Un usuario debe almacenar el nombre del archivo en la base de datos para su uso posterior. Mientras cargaba un archivo en S3, pas\u00e9 el tercer par\u00e1metro como &#8216;p\u00fablico&#8217;. Si no desea establecer el archivo como &#8216;p\u00fablico&#8217;, omita este par\u00e1metro.<\/p>\n<p>El usuario puede obtener la URL del archivo cargado usando el c\u00f3digo:<\/p>\n<pre><code>$url = Storage::disk('s3')-&gt;url('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>Para eliminar un archivo del dep\u00f3sito de S3, utilice el m\u00e9todo de eliminaci\u00f3n como se muestra a continuaci\u00f3n.<\/p>\n<pre><code>Storage::disk('s3')-&gt;delete('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>Se trata de c\u00f3mo subir un archivo a S3 usando Laravel Filesystem. Espero que conozcas el sistema proporcionado por Laravel para interactuar con Amazon S3. Comparta sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h3>Art\u00edculos relacionados<\/h3>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-cargar-y-comprimir-imagenes-en-laravel\/\" title=\"Una gu\u00eda para cargar y comprimir im\u00e1genes en Laravel\">Una gu\u00eda para cargar y comprimir im\u00e1genes en Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-realizar-una-copia-de-seguridad-de-la-aplicacion-laravel\/\" title=\"C\u00f3mo realizar una copia de seguridad de la aplicaci\u00f3n Laravel\">C\u00f3mo realizar una copia de seguridad de la aplicaci\u00f3n Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/copia-de-seguridad-de-la-aplicacion-laravel-en-dropbox\/\" title=\"Copia de seguridad de la aplicaci\u00f3n Laravel en Dropbox\">Copia de seguridad de la aplicaci\u00f3n Laravel en Dropbox<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQuieres saber c\u00f3mo subir un archivo a S3 en Laravel? En este art\u00edculo, le mostramos una gu\u00eda paso a paso que explica c\u00f3mo cargar un archivo en 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":[495],"tags":[849],"class_list":["post-28545","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28545"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28545\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21654"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}