Як завантажити зображення на інший сервер через 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" до масиву "диски".
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 для завантаження файлу користувачеві потрібно додати Facade до файлу контролера наступним чином:
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