I'm trying to create a new attribute as Image for category, I was able to create the attribute that attribute, but when I tried to upload an image it wasn't posible to save. This is my code: ---------------- **Wage/Categorylist/Setup/InstallData.php** namespace Wage\Categorylist\Setup; use Magento\Framework\Module\Setup\Migration; use Magento\Framework\Setup\InstallDataInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Catalog\Setup\CategorySetupFactory; class InstallData implements InstallDataInterface { public function __construct(CategorySetupFactory $categorySetupFactory) { $this->categorySetupFactory = $categorySetupFactory; } public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]); $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Category::ENTITY); $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId); $categorySetup->removeAttribute( \Magento\Catalog\Model\Category::ENTITY, 'thumbnail' ); $categorySetup->addAttribute( \Magento\Catalog\Model\Category::ENTITY, 'thumbnail', [ 'type' => 'varchar', 'label' => 'Featured Image', 'input' => 'image', 'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Image', 'required' => false, 'sort_order' => 5, 'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE, 'group' => 'General Information', ] ); $installer->endSetup(); } } **Wage/Categorylist/view/adminhtml/ui_component/category_form.xml** <?xml version="1.0" encoding="UTF-8"?> <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <fieldset name="content"> <field name="thumbnail"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">string</item> <item name="source" xsi:type="string">category</item> <item name="label" xsi:type="string" translate="true">Thumbnail Image</item> <item name="visible" xsi:type="boolean">true</item> <item name="formElement" xsi:type="string">fileUploader</item> <item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item> <item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item> <item name="required" xsi:type="boolean">false</item> <item name="sortOrder" xsi:type="number">30</item> <item name="uploaderConfig" xsi:type="array"> <item name="url" xsi:type="url" path="categorylist/category_thumbnailimage/upload"/> </item> </item> </argument> </field> </fieldset> </form> **Wage/Categorylist/Controller/Adminhtml/Category/Thumbnailimage/Upload.php** namespace Wage\Categorylist\Controller\Adminhtml\Category\Thumbnailimage; use Magento\Framework\Controller\ResultFactory; /** * Class Upload */ class Upload extends \Magento\Backend\App\Action { protected $baseTmpPath; protected $imageUploader; public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\Catalog\Model\ImageUploader $imageUploader ) { $this->imageUploader = $imageUploader; parent::__construct($context); } 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); } } **Wage/Categorylist/etc/di.xml** <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Wage\Categorylist\Controller\Adminhtml\Category\Thumbnailimage\Upload"> <arguments> <argument name="imageUploader" xsi:type="object">Magento\Catalog\CategoryImageUpload</argument> </arguments> </type> <virtualType name="Magento\Catalog\CategoryImageUpload" type="Magento\Catalog\Model\ImageUploader"> <arguments> <argument name="baseTmpPath" xsi:type="string">catalog/tmp/category</argument> <argument name="basePath" xsi:type="string">catalog/category</argument> <argument name="allowedExtensions" xsi:type="array"> <item name="jpg" xsi:type="string">jpg</item> <item name="jpeg" xsi:type="string">jpeg</item> <item name="gif" xsi:type="string">gif</item> <item name="png" xsi:type="string">png</item> </argument> </arguments> </virtualType> </config> [![enter image description here][1]][1] [1]: https://i.sstatic.net/fRGM6.png I get the following error > jquery.js:9666 POST > admin/categorylist/category_thumbnailimage/upload/k…9abae110ca00b7329cf2e97fc1b415f4d6dcadd9cdfe7abc8e356bd303bd4/?isAjax=true > 404 (Forbidden)