Varien File Uploader – How to Upload Multiple Files

varien-file-uploader

Varien_File_Uploader I need to know how to upload multiple files, received with different name.

ex:

1–>

<input name="userfile" type="file"> 

2–>

<input name="coverimage" type="file">

my current code is able to receive only one file.

if (isset($_FILES['userfile']['name']) && $_FILES['userfile']['name'] != '') {
        try {
            $uploader = new Varien_File_Uploader('userfile');
            echo 'testing';
            $uploader->setAllowedExtensions(array('png', 'jpg','gif'));
            $uploader->setAllowRenameFiles(true);
            $uploader->setFilesDispersion(false);
            $currentTimestamp = Mage::getModel('core/date')->timestamp(time()); 
            $folder_name_date = date('Y_m_d', $currentTimestamp);
            $path = Mage::getBaseDir('media') . DS . 'uploads' . DS . $folder_name_date;
            if(!is_dir($path)){
                mkdir($path, 0777, true);
            }
            $uploader->save($path, $_FILES['userfile']['name'] );             
            $newFilename = $uploader->getUploadedFileName();
            echo $path. DS .$newFilename;
        } catch (Exception $e) {
            echo "Error";
        }
    } else {
        echo 'File is not set';
    }

Best Answer

Magento uses Varien_File_Uploader to upload files within the system. When you want to upload multiple files, then use above class in a foreach loop. As far as I know, there is no "Magento way" for uploading multiple files. So go on with "PHP Way". ie use a foreach loop. This is an example

$_files = array(
    'userfile' => array(
        'allowed_extensions' => array('png', 'jpg', 'gif'),
        'rename_file'        => true,
        'file_dispersion'    => true,
        'file_path'          => 'path/to/the/file'
    ),
    'coverimage' => array(
        'allowed_extensions' => array('png', 'jpg', 'gif'),
        'rename_file'        => true,
        'file_dispersion'    => true,
        'file_path'          => 'path/to/the/file'
    )
);
foreach ($_files as $filename => $fileOpt) {
    if (isset($_FILES[$filename]['name']) && $_FILES[$filename]['name'] != '') {
        try {
            $uploader = new Varien_File_Uploader($filename);
            $uploader->setAllowedExtensions(array($fileOpt['allowed_extensions']));
            $uploader->setAllowRenameFiles($fileOpt['rename_file']);
            $uploader->setFilesDispersion($fileOpt['file_dispersion']);
            //$currentTimestamp = Mage::getModel('core/date')->timestamp(time()); 
            //$folder_name_date = date('Y_m_d', $currentTimestamp);
            //$path = Mage::getBaseDir('media') . DS . 'uploads' . DS . $folder_name_date;
            if(!is_dir($fileOpt['file_path'])){
                mkdir($path, 0777, true);
            }
            $uploader->save($fileOpt['file_path'], $_FILES[$filename]['name'] );             
            $newFilename = $uploader->getUploadedFileName();
            echo $fileOpt['file_path']. DS .$newFilename;
        } catch (Exception $e) {
            echo "Error";
        }
    } else {
        echo 'File is not set';
    }
}