Zend certified PHP/Magento developer

Upload multiple images to category on Admin in Magento 2.3.2

I want to create images uploader like this one on product page, when i add new product.
I’ve create a custom extension in which i can upload one image. It save in /tmp folder, i can get this image on frontend, but i dont know how to upload more images?
Here is my category_form.xml

< ?xml version="1.0" encoding="UTF-8"?>

string category Slider image true imageUploader ui/form/element/uploader/uploader Magento_Catalog/image-preview false 41

InstallData.php:

< ?php
namespace VendorModuleSetup;

use MagentoFrameworkSetupInstallDataInterface;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{

    /**
     * @var MagentoEavSetupEavSetupFactory
     */
    protected $eavSetupFactory;

    /**
     * InstallData constructor.
     * @param MagentoEavSetupEavSetupFactory $eavSetupFactory
     */
    public function __construct(MagentoEavSetupEavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        if (version_compare($context->getVersion(), '0.0.1', '< =')) {

            $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

            $eavSetup->addAttribute(
                MagentoCatalogModelCategory::ENTITY,
                'thumbnail', [
                    'type' => 'varchar',
                    'label' => 'Thumbnail',
                    'input' => 'image',
                    'backend' => 'MagentoCatalogModelCategoryAttributeBackendImage',
                    'required' => false,
                    'sort_order' => 6,
                    'global' => MagentoEavModelEntityAttributeScopedAttributeInterface::SCOPE_STORE,
                    'group' => 'General Information',
                ]
            );
        }

        $setup->endSetup();
    }
}

model file :

< ?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace VendorModuleModelCategory;

use MagentoCatalogModelCategory;
use MagentoCatalogModelResourceModelEavAttribute as EavAttribute;
use MagentoEavApiDataAttributeInterface;
use MagentoEavModelConfig;
use MagentoEavModelEntityType;
use MagentoCatalogModelResourceModelCategoryCollectionFactory as CategoryCollectionFactory;
use MagentoStoreModelStore;
use MagentoStoreModelStoreManagerInterface;
use MagentoUiComponentFormField;
use MagentoUiDataProviderEavValidationRules;
use MagentoCatalogModelCategoryFactory;
use MagentoFrameworkExceptionNoSuchEntityException;

/**
 * Class DataProvider
 *
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class DataProvider extends MagentoCatalogModelCategoryDataProvider
{

    private $categoryHelper;

    /**
     * DataProvider constructor
     *
     * @param string $name
     * @param string $primaryFieldName
     * @param string $requestFieldName
     * @param EavValidationRules $eavValidationRules
     * @param CategoryCollectionFactory $categoryCollectionFactory
     * @param StoreManagerInterface $storeManager
     * @param MagentoFrameworkRegistry $registry
     * @param Config $eavConfig
     * @param MagentoFrameworkAppRequestInterface $request
     * @param CategoryFactory $categoryFactory
     * $param JudaicaCatalogHelperCategory $categoryHelper
     * @param array $meta
     * @param array $data
     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
     */
    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        EavValidationRules $eavValidationRules,
        CategoryCollectionFactory $categoryCollectionFactory,
        StoreManagerInterface $storeManager,
        MagentoFrameworkRegistry $registry,
        Config $eavConfig,
        MagentoFrameworkAppRequestInterface $request,
        CategoryFactory $categoryFactory,
        VendorModuleHelperCategory $categoryHelper,
        array $meta = [],
        array $data = []
    ) {

        $this->categoryHelper = $categoryHelper;

        parent::__construct($name,
            $primaryFieldName,
            $requestFieldName,
            $eavValidationRules,
            $categoryCollectionFactory,
            $storeManager,
            $registry,
            $eavConfig,
            $request,
            $categoryFactory,
            $meta,
            $data);
    }


    /**
     * Get data
     *
     * @return array
     */
    public function getData()
    {
        if (isset($this->loadedData)) {
            return $this->loadedData;
        }

        $category = $this->getCurrentCategory();

        if ($category) {

            parent::getData();

            $categoryData = $this->loadedData[$category->getId()];

            foreach ($this->categoryHelper->getAdditionalImageTypes() as $imageType) {
                if (isset($categoryData[$imageType])) {
                    unset($categoryData[$imageType]);
                    $categoryData[$imageType][0]['name'] = $category->getData($imageType);
                    $categoryData[$imageType][0]['url'] = $this->categoryHelper->getImageUrl($category->getData($imageType));
                }
            }

            $this->loadedData[$category->getId()] = $categoryData;
        }

        return $this->loadedData;

    }

}

controller files:

< ?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace VendorModuleControllerAdminhtmlCategoryThumbnail;

use MagentoFrameworkControllerResultFactory;

/**
 * Class Upload
 */
class Upload extends MagentoCatalogControllerAdminhtmlCategoryImageUpload
{
    /**
     * Upload file controller action
     *
     * @return MagentoFrameworkControllerResultInterface
     */
    public function execute()
    {
        try {
            $result = $this->imageUploader->saveFileToTmpDir('thumbnail');

            $result['cookie'] = [
                'name' => $this->_getSession()->getName(),
                'value' => $this->_getSession()->getSessionId(),
                'lifetime' => $this->_getSession()->getCookieLifetime(),
                'path' => $this->_getSession()->getCookiePath(),
                'domain' => $this->_getSession()->getCookieDomain(),
            ];
        } catch (Exception $e) {
            $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
        }
        return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result);
    }
}
< ?php

/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace VendorModuleControllerAdminhtmlCategory;


class Save extends MagentoCatalogControllerAdminhtmlCategorySave
{

    /**
     * @return array
     */
    protected function getAdditionalImages() {
        return array('thumbnail');
    }

    /**
     * Image data preprocessing
     *
     * @param array $data
     *
     * @return array
     */
    public function imagePreprocessing($data)
    {

        foreach ($this->getAdditionalImages() as $imageType) {
            if (empty($data[$imageType])) {
                unset($data[$imageType]);
                $data[$imageType]['delete'] = true;
            }
        }

        return parent::imagePreprocessing($data);
    }


    /**
     * Filter category data
     *
     * @param array $rawData
     * @return array
     */
    protected function _filterCategoryPostData(array $rawData)
    {
        $data = $rawData;

        /**
         * a workaround for adding extra image fields to category form
         */

        foreach ($this->getAdditionalImages() as $imageType) {
            if (isset($data[$imageType]) && is_array($data[$imageType])) {
                if (!empty($data[$imageType]['delete'])) {
                    $data[$imageType] = null;
                } else {
                    if (isset($data[$imageType][0]['name']) && isset($data[$imageType][0]['tmp_name'])) {
                        $data[$imageType] = $data[$imageType][0]['name'];
                    } else {
                        unset($data[$imageType]);
                    }
                }
            }

        }

        return parent::_filterCategoryPostData($data);
    }
}

Thanks in advance for any help!