Como fazer upload de imagens para outro servidor através de FTP no Laravel
Você deseja enviar seus arquivos de seu aplicativo Laravel para outro servidor através de FTP? Laravel vem com suporte embutido para upload de arquivos para servidor externo ou nuvem. Neste guia, mostramos como fazer upload de arquivos (imagens) para outro servidor via FTP no site do Laravel.
Hospedar imagens em outro servidor pode ajudar a melhorar a velocidade do seu site. Essa técnica é uma espécie de conexão paralela entre um navegador da web e os servidores. Ele reduz a carga de um servidor, pois o navegador de imagens fará uma chamada para outro servidor.
O Laravel Filesystem fornece uma maneira conveniente de gerenciar nossos arquivos na nuvem ou em um servidor externo. O usuário pode escolher diferentes provedores de armazenamento Laravel como S3, Rackspace, FTP ou SFTP. Vamos dar uma olhada no upload de arquivos do Laravel usando o driver FTP.
Carregar arquivos para outro servidor através do driver FTP
Para começar, você deve saber os detalhes de seu host FTP, nome de usuário e senha FTP. Assim que estiver pronto com os detalhes, abra os .env
arquivos e adicione os detalhes conforme abaixo:
FTP_HOST=YOUR_FTP_HOST_VALUE
FTP_USERNAME=YOUR_FTP_USERNAME_VALUE
FTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE
Certifique-se de substituir os marcadores de posição pelos valores reais. Em seguida, abra o config/filesystems.php
arquivo e adicione a configuração ‘ftp’ ao array ‘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
],
],
];
Substitua DIR_PATH_TO_WHERE_IMAGE_STORE pelo caminho real onde você precisa armazenar as imagens. Por exemplo, se tivermos uma pasta chamada ‘imagens’ e o caminho para essa pasta for / var / www / html / dev / images, esse caminho será o valor para ‘root’ no array acima.
Para enviar arquivos por FTP, precisamos de um formulário onde o usuário pode enviar a imagem. Adicione o código abaixo em seu arquivo de visualização.
<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>
Você deve substituir PASS_ACTION_URL_HERE por sua rota real. Como estamos usando um armazenamento Laravel para fazer upload de arquivos, o usuário precisa adicionar o Facade ao arquivo do controlador da seguinte forma:
use IlluminateSupportFacadesStorage;
Finalmente, seu código de função do controlador seria o seguinte:
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’ é o nome do nosso arquivo de entrada. Nós construímos o nome exclusivo de nosso arquivo e o carregamos em um servidor externo. Observe que usamos o método Storage :: disk (‘ftp’). Esta função armazenaria nosso arquivo no caminho definido na configuração. Um usuário deve armazenar o valor ‘$ filenametostore’ em seu banco de dados.
Recuperar ou excluir imagem
Estamos lidando com as imagens tão obviamente, precisamos exibi-las no site. Como estamos armazenando essas imagens no servidor externo conhecido, o usuário deve saber o caminho HTTP da pasta onde armazenamos as imagens. Pode ser algo como YOUR_DOMAIN_URL / images /. No método do controlador, devemos armazenar o nome da imagem no banco de dados. Portanto, nossa tag HTML img será da seguinte maneira:
<img src="YOUR_DOMAIN_URL/images/FILE_NAME" />
Aqui FILE_NAME é o nome da sua imagem armazenada no banco de dados. O usuário pode excluir o arquivo da seguinte maneira:
Storage::disk('ftp')->delete('FILE_NAME');
Artigos relacionados
- Como fazer upload de arquivo para S3 usando o sistema de arquivos Laravel
- Carregar arquivos para Amazon S3 usando AWS PHP SDK