I have added custom field-set to product edit page and trying to upload multiple (more than 8) images.
To add custom field-set I have added layout file in my custom module –
/view/adminhtml/layout/catalog_product_new.xml
<referenceBlock name="product_form">
<block class="Myvendor\Newtab\Block\Adminhtml\Product\Edit\Tab\Welcome" name="product.welcome" as="custom-tab" >
<arguments>
<argument name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Design Tool Options</item>
<item name="collapsible" xsi:type="boolean">true</item>
<item name="opened" xsi:type="boolean">true</item>
<item name="sortOrder" xsi:type="string">2</item>
<item name="canShow" xsi:type="boolean">true</item>
<item name="componentType" xsi:type="string">fieldset</item>
</argument>
</arguments>
</block>
</referenceBlock>
and created following template file to add custom file type fields
/view/adminhtml/templates/catalog/product/edit/welcome.phtml
<input type="file" data-form-part="product_form" name="thumb">
To save data created
/Controller/Adminhtml/Rewrite/Product/Save.php
namespace Myvendor\Newtab\Controller\Adminhtml\Rewrite\Product;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Backend\App\Action;
class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Save
{
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Catalog\Controller\Adminhtml\Product\Builder $pbuilder,
\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $initializationHelper,
\Magento\Catalog\Model\Product\Copier $productCopier,
\Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager,
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory)
{
$this->_fileUploaderFactory = $fileUploaderFactory;
parent::__construct($context,$pbuilder,$initializationHelper,$productCopier,$productTypeManager,$productRepository);
}
public function execute()
{
$uploader = $this->_fileUploaderFactory->create(['fileId' => 'thumb']);
$uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('images/');
$uploader->save($path);
}
}
I am getting following exception –
1 exception(s): Exception #0 (Exception): $_FILES array is empty
Best Answer
Include this code into your class:
And for multiple images just put that code into loop, Hope it works for you.