2014-02-11 3 views
-2

이미지를 업로드하려고하는데 데이터베이스에 저장 중이지만 webroot 폴더에 파일을 저장하는 데 문제가 있습니다.cakephp에서 이미지 업로드 중이며 폴더에 업로드되지 않았습니다.

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

    } 

답변

0

당신이해야 $this->request->data['MediaManagement']['file_name'] = $name;

와 파일 정보 배열 삭제됩니다 : 모든 가능한 실수가 다음 내 컨트롤러가이처럼 나에게 제안 을 제공하십시오 ($this->request->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')); 
+0

아니요 더 명확하게 제안 할 수 있습니다. – Developer

+0

조정 내용을 포함하여 코드로 내 대답을 업데이트했습니다. – noslone

+0

오류 : SQLSTATE [42S22] : 열을 찾을 수 없습니다 : 1054 알 수없는 '필드 목록'배열의 '배열'INSERT INTO'bolaun_db'.media_managements' ('media_category_id','title', caption','file_name VALUES (1, 'df', 'fd', Array, '2014-02-11 19:22:59', 'unpublish', 575), 'status', 'user_id', 'file_type') , 'JPG') 주의 :이 오류 메시지를 사용자 정의하려면 app \ View \ Errors \ pdo_error.ctp를 작성하십시오. – Developer