Cómo subir imágenes a otro servidor a través de FTP en Laravel
¿Quieres subir tus archivos desde tu aplicación Laravel a otro servidor a través de FTP? Laravel viene con soporte incorporado para cargar archivos en un servidor externo o en la nube. En esta guía, le mostramos cómo cargar archivos (imágenes) a otro servidor a través de FTP en el sitio web de Laravel.
Alojar imágenes en otro servidor puede ayudar a mejorar la velocidad de su sitio. Esta técnica es una especie de conexión paralela entre un navegador web y los servidores. Reduce la carga de un servidor, ya que el navegador de imágenes dará una llamada a otro servidor.
Laravel Filesystem proporciona una forma conveniente de administrar nuestros archivos en la nube o en un servidor externo. El usuario puede elegir diferentes proveedores de almacenamiento de Laravel como S3, Rackspace, FTP o SFTP. Echemos un vistazo a la carga de archivos Laravel usando el controlador FTP.
Cargar archivos a otro servidor a través del controlador FTP
Para comenzar, debe conocer los detalles de su servidor FTP, nombre de usuario FTP y contraseña FTP. Una vez que esté listo con los detalles, abra los .env
archivos y agregue los detalles como se muestra a continuación:
FTP_HOST=YOUR_FTP_HOST_VALUE
FTP_USERNAME=YOUR_FTP_USERNAME_VALUE
FTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE
Asegúrese de reemplazar los marcadores de posición con los valores reales. A continuación, abra el config/filesystems.php
archivo y agregue la configuración ‘ftp’ a la matriz de ‘discos’.
config / filesystems.php
<?php
return [
......
'disks' => [
......
'ftp' => [
'driver' => 'ftp',
'host' => env('FTP_HOST'),
'username' => env('FTP_USERNAME'),
'password' => env('FTP_PASSWORD'),
'root' => 'DIR_PATH_TO_WHERE_IMAGE_STORE' // for example: /var/www/html/dev/images
],
],
];
Reemplace DIR_PATH_TO_WHERE_IMAGE_STORE con la ruta real donde necesita almacenar imágenes. Por ejemplo, si tenemos una carpeta llamada ‘imágenes’ y la ruta a esta carpeta es / var / www / html / dev / images, esta ruta será el valor de ‘raíz’ en la matriz anterior.
Para subir archivos a través de FTP, necesitamos un formulario donde un usuario puede enviar la imagen. Agregue el siguiente código en su archivo de vista.
<form action="{{ url('PASS_ACTION_URL_HERE') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image" id="exampleInputFile" multiple />
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Debe reemplazar el PASS_ACTION_URL_HERE con su ruta real. Como estamos usando un Laravel Storage para cargar archivos, el usuario necesita agregar Facade al archivo del controlador de la siguiente manera:
use IlluminateSupportFacadesStorage;
Finalmente, el código de función de su controlador sería el siguiente:
public function store(Request $request)
{
if($request->hasFile('profile_image')) {
//get filename with extension
$filenamewithextension = $request->file('profile_image')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('profile_image')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.uniqid().'.'.$extension;
//Upload File to external server
Storage::disk('ftp')->put($filenametostore, fopen($request->file('profile_image'), 'r+'));
//Store $filenametostore in the database
}
return redirect('images')->with('status', "Image uploaded successfully.");
}
‘profile_image’ es el nombre de nuestra entrada de archivo. Creamos el nombre único de nuestro archivo y luego lo subimos a un servidor externo. Observe que hemos utilizado el método Storage :: disk (‘ftp’). Esta función almacenaría nuestro archivo en la ruta definida en la configuración. Un usuario debe almacenar el valor ‘$ filenametostore’ en su base de datos.
Recuperar o eliminar una imagen
Estamos tratando con las imágenes tan obviamente, necesitamos mostrar estas imágenes en el sitio web. Como estamos almacenando estas imágenes en el servidor externo conocido, el usuario debe conocer la ruta HTTP de la carpeta donde almacenamos las imágenes. Puede ser algo como YOUR_DOMAIN_URL / images /. En el método del controlador, debemos almacenar el nombre de la imagen en la base de datos. Entonces, nuestra etiqueta HTML img será la siguiente:
<img src="YOUR_DOMAIN_URL/images/FILE_NAME" />
Aquí FILE_NAME es el nombre de su imagen almacenado en la base de datos. El usuario puede eliminar el archivo de la siguiente manera:
Storage::disk('ftp')->delete('FILE_NAME');
Artículos relacionados
- Cómo cargar un archivo a S3 usando el sistema de archivos Laravel
- Cargar archivos en Amazon S3 mediante AWS PHP SDK