Slavisa Perisic
Slavisa Perisic

Reputation: 1110

Magento custom image upload doesn't work

I need to create an image upload field for posts in Magento Blog Module (AW blog). Therefore, each post needs to contain an image.

I edited the following files: /home/clients/websites/w_gale/public_html/gale/app/code/community/AW/Blog/Block/Manage/Blog/Edit/Tab/Form.php

added fieldset like this:

$fieldset->addField('fileinputname', 'image', array(
            'label'     => Mage::helper('blog')->__('Upload image'),
            'required'  => false,
            'name'      => 'fileinputname',
            'required'  => true,
            'style'     => 'height:100px;border:2px solid #999;',
    )); 

on top of this file, in the right place, I defined form like this:

$form = new Varien_Data_Form(array(
            'id' => 'edit_form',
            'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
            'method' => 'post',
            'enctype' => 'multipart/form-data',
       )
    );

In Blogcontroller.php I added the following code, just bellow the if ($data = $this->getRequest()->getPost()) { line

if(isset($_FILES['fileinputname']['name']) && (file_exists($_FILES['fileinputname']['tmp_name']))) {
            try {

                $uploader = new Varien_File_Uploader('fileinputname');

                $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything

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

                $path = Mage::getBaseDir('media') . DS ;

                $uploader->save($path, $_FILES['fileinputname']['name']);

                $data['imageurl'] = $_FILES['fileinputname']['name'];

            } catch(Exception $e) {

            }
        } else {       

            if(isset($data['fileinputname']['delete']) && $data['fileinputname']['delete'] == 1)
                $data['imageurl'] = '';
            else
                unset($data['fileinputname']);
        }

However, the upload doesn't work. What am I doing wrong? I added a special row in appropriate field in a database. The frontend section displays the database value when I enter it manually.

Thanks

Upvotes: 1

Views: 3649

Answers (2)

J.2
J.2

Reputation: 156

You're using the right code. I solved the problem by using the right MYSQL data type. When I changed the data type from 'text' to 'varchar(255)' it solved the problem

And ... make sure that you add the following code:

$form = new Varien_Data_Form(array(
        'id' => 'edit_form',
        'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
        'method' => 'post',
        'enctype' => 'multipart/form-data',
   )
);

in /app/code/community/AW/Blog/Block/Manage/Blog/Edit/Form.php NOT: app/code/community/AW/Blog/Block/Manage/Blog/Edit/Tab/Form.php

Upvotes: 0

Dmytro Zavalkin
Dmytro Zavalkin

Reputation: 5277

This code of method from data helper which uploads image. You need implement method getBaseDir() (which returns dir where you wish store your uploaded files) by yourself.

/**
 * Upload image and return uploaded image file name or false
 *
 * @throws Mage_Core_Exception
 * @param string $scope the request key for file
 * @return bool|string
 */
public function uploadImage($scope)
{
    $adapter  = new Zend_File_Transfer_Adapter_Http();
    $adapter->addValidator('ImageSize', true, $this->_imageSize);
    $adapter->addValidator('Size', true, $this->_maxFileSize);
    if ($adapter->isUploaded($scope)) {
        // validate image
        if (!$adapter->isValid($scope)) {
            Mage::throwException(Mage::helper('mycompany_mymodule')->__('Uploaded image is not valid'));
        }
        $upload = new Varien_File_Uploader($scope);
        $upload->setAllowCreateFolders(true);
        $upload->setAllowedExtensions(array('jpg', 'gif', 'png'));
        $upload->setAllowRenameFiles(true);
        $upload->setFilesDispersion(false);
        if ($upload->save($this->getBaseDir())) {
            return $upload->getUploadedFileName();
        }
    }
    return false;
}

Upvotes: 2

Related Questions