-2

I am trying to upload image but it is being saved in database but having a problem to save the file in webroot folder. is there any possible mistake then please provide me suggestion my controller is like this:

if ($this->request->is('post')) {
            //echo '<pre>';print_r($this->request->data);exit;
            $this->request->data['MediaManagement']['created_date']= date('Y-m-d H:i:s');
            $this->request->data['MediaManagement']['status'] = 'unpublish';//default
            $this->request->data['MediaManagement']['user_id'] = $this->Auth->user('id');
            $random_number = $this->Smart->random_code();

            //echo $random_number;exit;
            $tmp_name = $this->request->data['MediaManagement']['file_name']['tmp_name'];
            $name = $this->request->data['MediaManagement']['file_name']['name'];
            if(empty($this->request->data['MediaManagement']['media_category_id'])){
                $this->request->data['MediaManagement']['media_category_id'] = 0;
            }
            $this->request->data['MediaManagement']['file_type'] = $this->Smart->get_file_extention($this->request->data['MediaManagement']['file_name']['name']);

            if(file_exists(WWW_ROOT.'mediafiles/'.$name))
            {
                $name= $random_number.$this->request->data['MediaManagement']['file_name']['name']; 
            }




            $this->request->data['MediaManagement']['file_name'] = $name;
            //debug($this->request->data);exit;
            $this->MediaManagement->create();
            if ($this->MediaManagement->save($this->request->data)) {
                move_uploaded_file($tmp_name, WWW_ROOT.'mediafiles/'.$name);

                $last_mediamanagement_id = $this->MediaManagement->getLastInsertID();
                $this->Session->setFlash(__('The media  has been saved'));
                $this->redirect(array('action' => 'redirectview/'.$last_mediamanagement_id));
            } else {
                $this->Session->setFlash(__('The media management could not be saved. Please, try again.'));
            }
        }
        $mediaCategories = $this->MediaManagement->MediaCategory->find('list');
        $users = $this->MediaManagement->User->find('list');
        $this->set('currentUserId',$this->Auth->user('id'));
        $this->set(compact('mediaCategories', 'users'));

    }
Developer
  • 45
  • 1
  • 10

1 Answers1

0

You are clearing the file information array with $this->request->data['MediaManagement']['file_name'] = $name;

This should be: $this->request->data['MediaManagement']['file_name']['name'] = $name;

Update(changed the code a bit):

//in view:
echo $this->Form->input('MediaManagement.file', array(/*your options*/));//instead of MediaManagement.file_name

//in controller:
if($this->request->is('post')) {
    //echo '<pre>';print_r($this->request->data);exit;
    $this->request->data['MediaManagement']['created_date']= date('Y-m-d H:i:s');
    $this->request->data['MediaManagement']['status'] = 'unpublish';//default
    $this->request->data['MediaManagement']['user_id'] = $this->Auth->user('id');

    $path = WWW_ROOT.'mediafiles'.DS;
    if(!is_dir($path)) {
        mkdir($path, 0777);
    }

    $tmp_name = $this->request->data['MediaManagement']['file']['tmp_name'];
    $name = $this->request->data['MediaManagement']['file']['name'];
    if(empty($this->request->data['MediaManagement']['media_category_id'])){
        $this->request->data['MediaManagement']['media_category_id'] = 0;
    }

    //you should get the file_type based on the mime type and not based on the extention, because the extension can be manipulated by the user
    $this->request->data['MediaManagement']['file_type'] = $this->Smart->get_file_extention($this->request->data['MediaManagement']['file']['name']);

    while(file_exists($path.$name)) {
        $name = $this->Smart->random_code().$this->request->data['MediaManagement']['file']['name']; 
    }
    $this->request->data['MediaManagement']['file_name'] = $name;

    $this->MediaManagement->create();
    if ($this->MediaManagement->save($this->request->data)) {
        $last_mediamanagement_id = $this->MediaManagement->getLastInsertID();

        if(move_uploaded_file($tmp_name, $path.$name)) {
            $this->Session->setFlash(__('The media has been saved'));
            $this->redirect(array('action' => 'redirectview/'.$last_mediamanagement_id));
        } else {
            $this->Session->setFlash(__('Could not upload file. Please, try again.'));
            $this->MediaManagement->delete($last_mediamanagement_id);//delete from database
        }
    } else {
        $this->Session->setFlash(__('The media management could not be saved. Please, try again.'));
    }
}
$mediaCategories = $this->MediaManagement->MediaCategory->find('list');
$users = $this->MediaManagement->User->find('list');
$this->set('currentUserId',$this->Auth->user('id'));
$this->set(compact('mediaCategories', 'users'));
noslone
  • 1,301
  • 10
  • 14
  • I have updated my answer with your code including adjustments. – noslone Feb 11 '14 at 12:10
  • Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'SQL Query: INSERT INTO `bolaun_db`.`media_managements` (`media_category_id`, `title`, `caption`, `file_name`, `created_date`, `status`, `user_id`, `file_type`) VALUES (1, 'df', 'fd', Array, '2014-02-11 19:22:59', 'unpublish', 575, 'JPG') Notice: If you want to customize this error message, create app\View\Errors\pdo_error.ctp – Developer Feb 11 '14 at 13:38