Skip to main content
1 of 2
CodeGenius
  • 478
  • 6
  • 17

M2 uploading multiple files in custom module does not work

I am new to magento 2. I have been overriding a module in which I am trying to post images through a form. Here is my template file code:

    <form action="somecontroller.." enctype="multipart/form-data">
    <!--  here is the module code -->
    
      <div class="field review-field-media">
<label class="label"><span><?php echo __('Attachments') ?></span></label>
<div class="control">
<input type="file" name="review_media" id="review_media" accept="image/*" multiple="multiple" />
 </div>
</div>


</form>

and here is my controller execute method:

public function execute() {

        $returnable = parent::execute();

        $bgImage = $this->getRequest()->getFiles('review_media');
        $fileName = ($bgImage && array_key_exists('name', $bgImage)) ? $bgImage['name'] : null;

        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        
        if ($bgImage && $fileName) {
            try {
                $uploader = $objectManager->create(
                        'Magento\MediaStorage\Model\File\Uploader', ['fileId' => 'review_media']
                );
                $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
                $imageAdapterFactory = $objectManager->get('Magento\Framework\Image\AdapterFactory')
                        ->create();

                $uploader->setAllowRenameFiles(true);
                $uploader->setFilesDispersion(true);
                $uploader->setAllowCreateFolders(true);

                $mediaDirectory = $objectManager->get('Magento\Framework\Filesystem')
                        ->getDirectoryRead(DirectoryList::MEDIA);

                $result = $uploader->save($mediaDirectory->getAbsolutePath('review_images'));

                $model->setBgImage($result['file']);
            } catch (\Exception $e) {
                if ($e->getCode() == 0) {
                    $this->messageManager->addError($e->getMessage());
                }
            }
        }

        return $returnable;
    }

Now the problem is that when I upload multiple images through frontend and debug the code I get null in $bgImage = $this->getRequest()->getFiles('review_media');

But when I upload a single file $bgImage shows the requested file to upload. Even in case of single image file when $uploader =$objectManager>create('Magento\MediaStorage\Model\File\Uploader', ['fileId' => 'review_media']); I get exception that image was not uploaded and the later code is not executed.

IMPORTANT : I am following magento's zend code so don't want to go with php $_FILES[] method

Million thanks in advance!

CodeGenius
  • 478
  • 6
  • 17