Facade Storage y FTP en Laravel

Aquí estamos con otro nuevo post relacionado con la facade Storage de Laravel. Este será un post más técnico y haremos uso de algunos términos que para algunos lectores pueden no ser sencillos.

Si tienes algunas dudas o comentarios, no dudes en dejar un comentario.

Laravel framework - Facade Storage

Bien, pues al lío, vamos a tratar el tema de subir ficheros por FTP usando esta facilidad de conectar vía FTP en Laravel a través de Storage.

Como veremos esto es algo muy sencillo, básicamente necesitamos configurar la conexión al FTP en el fichero de configuración en el fichero config/filesystems.php y usarlo como «disco» a través de la facade Storage.

Una vez configurado el «disco», únicamente necesitaríamos seleccionar ese disco y usar las funciones que nos ofrece la facade Storage para ver si existe un fichero, leer un fichero, eliminar un fichero o subir un fichero entre otras muchas funcionalidades que nos ofrece Laravel.

Configurar FTP en Laravel disponible desde la facade Storage

Para configurar una nueva conexión ftp en Laravel que esté disponible desde la facade Storage hay que hacerlo en el siguiente fichero.

config/filesystems.php

En este fichero hay que añadir una nueva entra al array de configuración dentro de la key disks.

Un ejemplo sería el siguiente código.

'test-sftp' => [

    'driver'        => 'sftp',
    'host'          => env('TEST_FEED_SFTP_HOST'),
    'port'          => env('TEST_FEED_SFTP_PORT'),
    'username'      => env('TEST_FEED_SFTP_USERNAME_SERVICES'),
    'password'      => env('TEST_FEED_SFTP_PASSWORD'),
    'privateKey'    => storage_path().'/app/'.ENV('TEST_FEED_SFTP_PRIVATE_KEY_FILE'),
    'timeout'       => env('TEST_FEED_SFTP_TIMEOUT')

    // Optional FTP Settings...
    // 'ssl'        => true,
    // 'passphrase' => '',
    // 'root'       => '/',
    // 'passive'    => true,
    // 'timeout'    => 30,
]

Aquí tenemos un código de ejemplo con la configuración básica de un servidor FTP usando la facade Laravel Storage.

Lo primero que hay que hacer es seleccionar el driver que vamos a usar, lo recomendable sería usar sftp, en nuestro caso, aunque también podríamos configurar para distintos espacios como AWS, Dropbox o mismamente para gestionar ficheros en local. Estos temas podemos tratarlos en otros posts.

Los siguientes parámetros serían la configuración del host, port, username, password y private key de nuestro servidor FTP.

Lo más recomendable es almacenar esta información en nuestro fichero .env de configuración y no ponerlo ahí directamente, lo cuál nos hará más fácil actualizar la información de conexión con el FTP si la cambiamos.

Parámetros opcionales de configuración FTP en Laravel

Podemos configurar también otros parámetros opcionales en nuestra conexión. Tales como:

  • ssl -> parámetro para indicar si vamos a usar conexión ssl.
  • passphrase -> parámetro para indicar una passphrase si la vamos a utilizar para cifrar la conexión.
  • root -> parámetro para indicar el el path inicial desde donde vamos a trabajar con la conexión. Por ejemplo /test/ por lo tanto en nuestra conexión empezaríamos desde esa carpeta.
  • passive -> parámetro para indicar si vamos a conectarnos en modo pasivo o no a nuestro FTP.
  • timeout -> parámetro para indicar el número de segundos a partir del cual vamos a lanzar excepciones por timeout.

Refrescar la caché de Laravel

Tal vez, después de configurar una nueva conexión sea necesario refrescar la caché de Laravel, desde el link anterior puedes acceder a ello en caso de ser necesario porque tu sistema no ha detectado la nueva configuración añadida.

Para ello te hará falta también el uso de comandos de Artisan para Laravel que también puedes acceder al enlace anterior con la guía de comandos y seguir aprendiendo más de nuestro framework favorito.

Una vez que tenemos la facade disponible vamos a ver algunas de las funcionalidades que nos ofrece a continuación.

Comprobar si un fichero existe en Laravel

$fileExist = Storage::disk('test-sftp')->exists($fileName);
if ($fileExist) print "Existe";

La explicación del código es muy sencilla.

Simplemente usamos Storage::disk y le pasamos nuestro «disco» de configuración que hemos creado antes, en este caso test-sftp.

Ejecutamos el método exists y le pasamos el path del fichero partiendo desde el punto root configurado, o desde ‘/’ por defecto si no hay root definido.

Comprobar que un fichero no existe en Laravel

Bien, Laravel nos ofrece también la función missing para justamente comprobar que un fichero o una ruta no existe.

$fileIsMissing = Storage::disk('test-sftp')->missing($fileName);
if ($fileIsMissing ) print "NO Existe";

Bien, la explicación del código es similar al anterior, únicamente que en este caso comprobamos que el fichero no existe.

Leer un fichero por FTP en Laravel

Una vez que ya tenemos nuestro disco en la configuración es hora de usarla.

Vamos a leer un fichero por FTP.

$contents = Storage::disk('test-sftp')->get('file.txt');

En la variable contents estará la información en texto plano del fichero file.txt si éste existe en nuestro servidor.

Una buena manera de trabajar sería combinar los dos métodos que hemos visto, el de comprobar que exista y en ese caso ya leer el fichero.

Subir contenido a un fichero por FTP en Laravel

Storage::disk('test-sftp')->put('file.jpg', $contents);

Vemos que es sencillo, únicamente poner el contenido de la variable $contents dentro del fichero file.jpg en este caso concreto contents sería los datos de una imagen jpg.

Subir un fichero por FTP en Laravel

$path = Storage::disk('test-sftp')->putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');

En este caso, podemos subir nuestro fichero local dentro de la carpeta photos como photo.jpg.

En resumen, /photos/photo.jpg tendrá el contenido de nuestro fichero local que está en /path/to/photo esto puede aplicarse para cualquier tipo de fichero.

Documentación oficial de filesystems de Laravel

Desde aquí se puede acceder ala documentación oficial de Laravel para expandir más conocimientos y ejemplos.

Aquí se encontrarán más ejemplos de uso y todas las opciones que nos ofrece Laravel filesystems.

Entre otras cosas podemos definir la visibilidad de los ficheros que subamos, añadir metadatos, descargar ficheros, generar URLs temporales y muchas más cosas.

Resumen

En este post hemos aprendido a cómo usar la facade Storage de Laravel.

Además de la configuración de un servicio sftp y de comprobar si existe un fichero o subir un fichero, también tienes el enlace a la documentación oficial de Laravel para seguir expandiendo tu conocimiento.

Comparte 🙂

Si te ha gustado el contenido de este artículo no te olvides de compartirlo ya que con eso me harías muy feliz. GRACIAS 😉

Participa 😉

Además de todo ello, si tienes dudas o puedes aportar algo con un comentario, no dudes en hacerlo. GRACIAS 😉

2 Responses to “Facade Storage y FTP en Laravel”

  1. jhon

    Me servio de mucho la documentacion, muchas gracias.
    Tengo duda de como hacer la descarga de un archivo via FTP

    Responder

¿Y tú qué opinas?

Antes de participar en los comentarios, ten en cuenta que leeré personalmente cualquier cosa que escribas. Así que, por favor, mantén las formas y compórtate como una persona de bien.

  • (will not be published)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>