Magento2 : Custom Upload Csv File

Phtml file code Sample

<div class="image image-placeholder" style="overflow: hidden;">
                <div  class="uploader">
                   <div class="fileinput-button form-buttons button">
                        <span>Browse Files...</span>
                        <input id="file" name="file" type="file">
                    </div>
                </div>

                <div class="product-image-wrapper">
                    <p class="image-placeholder-text">
                        Browse to find or drag csv file here
                    </p>
                </div>
</div>

<script type="text/x-magento-init">
    {
        "*": {
            "NameSpace_ModuleName/js/uploadCsv": {
                "uploadUrl": "<?php echo $this->getUploadAjaxUrl() ?>"
            }
        }
    }          
</script>
Js file code Sample
define
(
    [
        'jquery'
    ],
    function($)
    {
        'use strict';
        return function (config) 
        {
            jQuery('#file').change(function()
            {    
                var formdata = new FormData(); 
                if(jQuery(this).prop('files').length > 0)
                {
                    file =jQuery(this).prop('files')[0];
                    formdata.append("file", file);   
                    jQuery.ajax({
                                    url: config.uploadInventoryUrl,
                                    type: "POST",
                                    data: formdata,
                                    showLoader: true,
                                    contentType: false,
                                    processData: false,
                                    success: function (result) {
                                                                    
                                                               }
                             });
                }
              });
          }; 
    }
);
Controller sample File Code
namespace NameSpace\ModuleName\Controller\Adminhtml\Ajax;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\Exception\LocalizedException;
use NameSpace\ModuleName\Model\CsvUploadProductsHandler;

class UploadCsv extends Action
{
    
   protected $helper;
   protected $resultPageFactory;  
   protected $csvProcessor;
   protected $uploadProductsHandler;
   protected $backendSession;
   
   public function __construct(
    Context $context, 
    PageFactory $resultPageFactory,
    \Magento\Framework\File\Csv $csvProcessor,
    \NameSpace\ModuleName\Helper\Reservation $helper,
    CsvUploadProductsHandler $uploadProductsHandler,
    \Magento\Backend\Model\Session $backendSession       
    ) 
    {
        $this->csvProcessor = $csvProcessor;
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
        $this->helper = $helper;   
        $this->uploadProductsHandler = $uploadProductsHandler;
        $this->backendSession = $backendSession;
    }

    public function execute() 
    {
        $saleId = $this->getRequest()->getParam('saleId'); 
        if(isset($_FILES['file']['name']) and (file_exists($_FILES['file']['tmp_name'])) ) 
        {
           $uploader = $this->uploaderFactory->create(['fileId' => $this->fileId])
                                   ->setAllowCreateFolders(true)
                                   ->setAllowedExtensions($this->allowedExtensions)
                                   ->addValidateCallback('validate', $this, 'validateFile');    
          $name = time() . '_' . str_replace(' ', '_', $_FILES['file']['name']);                 
          $responce = $uploader->save($destinationPath,$name);

          $dataComplete = $this->csvProcessor->getData($filePath);
           
        }
        else
        {
            throw new \Magento\Framework\Exception\LocalizedException(__('Invalid file upload attempt.'));
        }
    }
}

Comments

  1. Thanks for sharing, I am getting error when i try to upload "Invalid Form Key. Please refresh the page." Please let me know what i have to do.

    ReplyDelete

Post a Comment