Как загрузить изображения на другой сервер через FTP в Laravel
Вы хотите загрузить файлы из своего приложения Laravel на другой сервер через FTP? Laravel поставляется со встроенной поддержкой загрузки файлов на внешний сервер или в облако. В этом руководстве мы покажем вам, как загружать файлы (изображения) на другой сервер через FTP на веб-сайте Laravel.
Размещение изображений на другом сервере может помочь повысить скорость вашего сайта. Этот метод представляет собой своего рода параллельное соединение между веб-браузером и серверами. Это снижает нагрузку с одного сервера, поскольку для изображений браузер будет обращаться к другому серверу.
Файловая система Laravel предоставляет удобный способ управления нашими файлами в облаке или на внешнем сервере. Пользователь может выбрать разных поставщиков хранилищ Laravel, таких как S3, Rackspace, FTP или SFTP. Давайте посмотрим на загрузку файла Laravel с использованием драйвера FTP.
Выгрузка файлов на другой сервер через драйвер FTP
Для начала вы должны знать подробности своего FTP-хоста, имени пользователя FTP и пароля FTP. Как только вы будете готовы с деталями, откройте .env
файлы и добавьте детали, как показано ниже:
FTP_HOST=YOUR_FTP_HOST_VALUE
FTP_USERNAME=YOUR_FTP_USERNAME_VALUE
FTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE
Обязательно замените заполнители фактическими значениями. Затем откройте config/filesystems.php
файл и добавьте конфигурацию ftp в массив disks.
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
],
],
];
Замените DIR_PATH_TO_WHERE_IMAGE_STORE фактическим путем, по которому вам нужно хранить изображения. Например, если у нас есть папка с именем «images» и путь к этой папке / var / www / html / dev / images, тогда этот путь будет использоваться как значение для «root» в приведенном выше массиве.
Для загрузки файлов через FTP нам нужна форма, в которой пользователь может отправить изображение. Добавьте приведенный ниже код в свой файл представления.
<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>
Вы должны заменить PASS_ACTION_URL_HERE своим фактическим маршрутом. Поскольку мы используем Laravel Storage для загрузки файлов, пользователю необходимо добавить фасад в файл контроллера следующим образом:
use IlluminateSupportFacadesStorage;
Наконец, код функции вашего контроллера будет таким:
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’ – это имя нашего входного файла. Мы создаем уникальное имя нашего файла и затем загружаем его на внешний сервер. Обратите внимание, что мы использовали метод Storage :: disk (‘ftp’). Эта функция сохранит наш файл по пути, указанному в конфигурации. Пользователь должен сохранить значение «$ filenametostore» в вашей базе данных.
Получить или удалить изображение
Мы имеем дело с изображениями, поэтому очевидно, что нам нужно отображать эти изображения на веб-сайте. Поскольку мы храним эти изображения на известном внешнем сервере, пользователь должен знать HTTP-путь к папке, в которой мы храним изображения. Это может быть что-то вроде YOUR_DOMAIN_URL / images /. В методе контроллера мы должны сохранить имя изображения в базе данных. Итак, наш HTML-тег img будет выглядеть следующим образом:
<img src="YOUR_DOMAIN_URL/images/FILE_NAME" />
Здесь FILE_NAME – имя вашего изображения, хранящееся в базе данных. Пользователь может удалить файл следующим образом:
Storage::disk('ftp')->delete('FILE_NAME');
Статьи по Теме
- Как загрузить файл на S3 с помощью файловой системы Laravel
- Загрузка файлов в Amazon S3 с помощью AWS PHP SDK