WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как загрузить изображения на другой сервер через FTP в Laravel

488

Вы хотите загрузить файлы из своего приложения 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');

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее