To create category attribute thumbnail image, following code snippet can be used to serve the purpose.
You need to create a controller file as following:
<?php namespace Magemeta\Categorylist\Controller\Adminhtml\Category\Thumbnailimage; use Magento\Framework\Controller\ResultFactory; /** * Class Upload */ class Upload extends \Magento\Backend\App\Action { protected $baseTmpPath; /** * Image uploader * * @var \Magento\Catalog\Model\ImageUploader */ protected $imageUploader; /** * Upload constructor. * * @param \Magento\Backend\App\Action\Context $context * @param \Magento\Catalog\Model\ImageUploader $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); } }
You need to add this in the di.xml of your module:
<type name="Magemeta\Categorylist\Controller\Adminhtml\Category\Thumbnailimage\Upload"> <arguments> <argument name="imageUploader" xsi:type="object">Magento\Catalog\CategoryImageUpload</argument> </arguments> </type>
This is needed because the dependency of your controller called imageUploader
is an instance of \Magento\Catalog\Model\ImageUploader
. This is just a general class for upload that does not have the base path and base tmp path set. So it does not know where to upload the files.
But in the etc/di.xml
file of the catalog module you have this virtual type defined:
<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>