【问题标题】:Image uploading in cakephp and is not been uploaded in folder在 cakephp 中上传图像并且未上传到文件夹中
【发布时间】:2014-03-09 02:35:00
【问题描述】:

我正在尝试上传图像,但它正在保存在数据库中,但在将文件保存在 webroot 文件夹中时出现问题。是否有任何可能的错误然后请给我建议 我的控制器是这样的:

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'));

    }

【问题讨论】:

    标签: php image cakephp cakephp-2.3 image-upload


    【解决方案1】:

    你正在用$this-&gt;request-&gt;data['MediaManagement']['file_name'] = $name;清除文件信息数组

    这应该是:$this-&gt;request-&gt;data['MediaManagement']['file_name']['name'] = $name;

    更新(修改代码):

    //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'));
    

    【讨论】:

    • 我已经用你的代码更新了我的答案,包括调整。
    • 错误:SQLSTATE[42S22]:找不到列:1054 '字段列表'中的未知列'数组'SQL 查询:插入bolaun_db.media_managements (media_category_id, titlecaptionfile_namecreated_datestatususer_idfile_type) 值(1,'df','fd',数组,'2014-02-11 19:22:59 ', 'unpublish', 575, 'JPG') 注意:如果要自定义此错误信息,请创建 app\View\Errors\pdo_error.ctp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多