Waseem
Waseem

Reputation: 193

Varien_File_Uploader is not uploading files in custom module in magento

I am trying to save the images in my module but the images are not saving from the form.

$uploader = new Varien_File_Uploader('image'); this code is not working I dont know why. The loop breaks on this line and the control get out of the loop from here. How can I save the images.

Here is my save function in the controller

public function saveAction()
{
if ($this->getRequest()->getPost())
{
    try
    {
    $postData = $this->getRequest()->getPost(); 
    //echo "<pre>";print_r($postData); exit;
    $articleModel = Mage::getModel('blog/article');
    $imgFilename = NULL;
    if($_FILES['image']['name'] != '') 
    {//echo "<pre>"; echo count($_FILES['image']['name']);
        foreach($_FILES['image']['name'] as $_FILES['image']['name'])
        {
        //print_r($_FILES['image']['name']); 
        try
        { echo "1"; 
            $uploader = new Varien_File_Uploader('image'); echo "hi";
            //print_r($uploader);exit;
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png','flv'));
            $uploader->setAllowRenameFiles(false);
            $uploader->setFilesDispersion(false);
            $uploader->setAllowCreateFolders(true);
            // Set media as the upload dir
            $media_path = Mage::getBaseDir('media') . DS . 'blog' . DS;
            $imgFilename = time() . $postData['image'];
            // Upload the image
            //$uploader->save($media_path, $_FILES['image']['name']);echo "4";
            $uploader->save($media_path, $imgFilename);
        }
        catch (Exception $e) 
        { 
            Mage::log($e);
            $this->_redirectError(502);
        }
           $data['image'] = $imgFilename; 
        }
    } 
    else
    {        
        if(isset($data['image']['delete']) && $data['image']['delete'] == 1)
        $data['image'] = '';
        else 
        unset($data['image']);
    }
      //echo "out"; exit;
    if( $this->getRequest()->getParam('id') <= 0 )
        $articleModel->setCreatedTime(
        Mage::getSingleton('core/date')
        ->gmtDate());
        $articleModel
        ->addData($postData)
        ->setUpdatedTime(
        Mage::getSingleton('core/date')
        ->gmtDate())
        ->setId($this->getRequest()->getParam('id'))
        ->save();
        $lastid = $articleModel->getId();
        if($data['image'] != '')
        {
        foreach($data['image'] as $img)
        { 
            $imageModel=Mage::getModel('blog/image');
            $imageModel->setArticleId($lastid)->setImage($data['image'])->save();
        }
        }
        Mage::getSingleton('adminhtml/session')
        ->addSuccess('successfully saved');
        Mage::getSingleton('adminhtml/session')
        ->setarticleData(false);
        $this->_redirect('*/*/');
        //return;
        if ($this->getRequest()->getParam('back'))
        {
        $this->_redirect('*/*/edit',array('id' => $articleModel->getId()));
        return;
        }
    }
    catch (Exception $e)
    {
            Mage::getSingleton('adminhtml/session')
            ->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')
            ->setarticleData($this->getRequest()
            ->getPost());
            $this->_redirect('*/*/edit',
                array('id' => $this->getRequest()
                ->getParam('id')));
            return;
        }
    }
        $this->_redirect('*/*/');
}

and here is my form for the image

<?php
class Vertax_Blog_Block_Adminhtml_Article_Edit_Tab_Image extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{

   $form = new Varien_Data_Form();
   $this->setForm($form);
   $fieldset = $form->addFieldset('image_form',
                                   array('legend'=>'image'));
 //$fieldset->addType('image', Mage::getConfig()->getBlockClassName('blog/adminhtml_article_helper_image'));
 $fieldset->addType('image', 'Vertax_Blog_Block_Adminhtml_Article_Helper_Image');

$fieldset->addField('image', 'image', array(
        'label'     => 'Image',
        'required'  =>  false,
        'name'      => 'image[]',
    'multiple'  => 'multiple',
    'mulitple'  =>  true,
    ));

if (Mage::getSingleton('adminhtml/session')->getBlogPostData()) {
        $form->setValues(Mage::getSingleton('adminhtml/session')->getBlogPostData());
        Mage::getSingleton('adminhtml/session')->setBlogPostData(null);
    } elseif (Mage::registry('article_data')) {
        $form->setValues(Mage::registry('article_data')->getData());
    }
    return parent::_prepareForm();
}
}
?>

Upvotes: 1

Views: 5932

Answers (4)

devJsha
devJsha

Reputation: 61

$uploader = new Mage_Core_Model_File_Uploader(
        array(
                 'name' => $_FILES['galleryImage']['name'][$i],
                 'type' => $_FILES['galleryImage']['type'][$i],
                 'tmp_name' => $_FILES['galleryImage']['tmp_name'][$i],
                 'error' => $_FILES['galleryImage']['error'][$i],
                 'size' => $_FILES['galleryImage']['size'][$i]
            ));

Upvotes: 1

Zsolti
Zsolti

Reputation: 1607

Try to use

$uploader = new Varien_File_Uploader($_FILES['image']);

instead of what you use currently.

Upvotes: 0

Mohammad Faisal
Mohammad Faisal

Reputation: 5959

there was a problem in your code while adding fieldset

$fieldset->addField('image', 'image', array(
        'label'     => 'Image',
        'required'  =>  false,
        'name'      => 'image[]',
    'multiple'  => 'multiple',
    'mulitple'  =>  true,
    ));

here you had set the name to image[] which in turn will return the array as $_FILES['image][name][], $_FILES['image][tmp_name][].

If you want to upload single file then set 'name' = 'image' or see this question

Upvotes: 0

Amit Bera
Amit Bera

Reputation: 7611

Waseem,please try code for upload image..

$uploader = new Mage_Core_Model_File_Uploader('image');
            $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png'));

            $uploader->setFilesDispersion(true);
 $media_path = Mage::getBaseDir('media') . DS . 'blog' . DS;
            $imgFilename = time() . $postData['image'];
            // Upload the image
            //$uploader->save($media_path, $_FILES['image']['name']);echo "4";
            $uploader->save($media_path, $imgFilename);

Upvotes: 0

Related Questions