2014-03-27 106 views
0

嗨,大家好我想将图像保存到文件系统,然后将文件路径保存到数据库。上传图像并将文件路径保存到数据库Cakephp

我控制器

<?php 

class ProductsController extends AppController { 

    public function add() { 
    if ($this->request->is('post')) { 
    if (!empty($this->request->data)) { 
    $this->Product->create(); 
    $this->Product->save($this->request->data['post']); 
     } 
    } 
    } 
    } 

我的视图代码:

<div class="add_ondemand"> 
    <h1>Add Post</h1> 
    <?php 
    echo $this->Form->create('post'); 
    echo $this->Form->input('name', array('placeholder'=>'name')); 
    echo $this->Form->textarea('description', array('placeholder'=>'description')); 
    echo $this->Form->input('director', array('placeholder'=>'director')); 
    echo $this->Form->input('cast', array('placeholder'=>'cast')); 
    echo $this->Form->input('release_date', array('placeholder'=>'release  date','id'=>'datepicker', 'type'=>'text')); 
    echo $this->Form->input('Product.File',array('type' => 'file')); 
    echo $this->Form->end('Save Post'); 
    ?> 

</div> 



<script> 
$(function() { 
$("#datepicker").datepicker(); 
}); 
</script> 

任何帮助,将不胜感激

回答

3

利用你的Product.php模型文件.......

public $validate = array(
        'photo_name' => array(
         'uploadError' => array(
          'rule' => 'uploadError', 
          'message' => 'Something went wrong with the file upload', 
          'required' => FALSE, 
          'allowEmpty' => TRUE, 
         ), 
         'photoSize' => array(
          'rule' => array('fileSize','<=','2MB'), 
          'message' => 'Photo size must be less then 2MB.', 
          'required' => FALSE, 
          'allowEmpty' => TRUE, 
         ), 
         'mimeType' => array(
          'rule' => array('mimeType', array('image/gif','image/png','image/jpg','image/jpeg')), 
          'message' => 'Invalid file, only images allowed', 
          'required' => FALSE, 
          'allowEmpty' => TRUE 
         ), 
         'processUpload' => array(
          'rule' => 'processUpload', 
          'message' => 'Something went wrong processing your file', 
          'required' => FALSE, 
          'allowEmpty' => TRUE, 
          'last' => TRUE, 
         ) 
        ) 
      ); 


public $uploadDir = 'img/user_photos'; 

/** 
* Process the Upload 
* @param array $check 
* @return boolean 
*/ 
public function processUpload($check=array()) { 
    // deal with uploaded file 
    if (!empty($check['photo_name']['tmp_name'])) { 

     // check file is uploaded 
     if (!is_uploaded_file($check['photo_name']['tmp_name'])) { 
      return FALSE; 
     } 

     // build full filename 
     $filename = WWW_ROOT . $this->uploadDir . DS . String::uuid().'.'.pathinfo($check['photo_name']['name'], PATHINFO_EXTENSION); 

     // @todo check for duplicate filename 

     // try moving file 
     if (!move_uploaded_file($check['photo_name']['tmp_name'], $filename)) { 
      return FALSE; 

     // file successfully uploaded 
     } else { 
      // save the file path relative from WWW_ROOT e.g. uploads/example_filename.jpg 
      $this->data[$this->alias]['filepath'] = str_replace(DS, "/", str_replace(WWW_ROOT.IMAGES_URL, "", $filename)); 
     } 
    } 

    return TRUE; 
} 

/** 
* Before Save Callback 
* @param array $options 
* @return boolean 
*/ 
public function beforeSave($options = array()) { 
    // a file has been uploaded so grab the filepath 
    if (!empty($this->data[$this->alias]['filepath'])) { 
     $this->data[$this->alias]['photo_name'] = $this->data[$this->alias]['filepath']; 
    }  
    return parent::beforeSave($options); 
} 

public function beforeValidate($options = array()) { 
    // ignore empty file - causes issues with form validation when file is empty and optional 
    if (!empty($this->data[$this->alias]['photo_name']['error']) && $this->data[$this->alias]['photo_name']['error']==4 && $this->data[$this->alias]['photo_name']['size']==0) { 
     unset($this->data[$this->alias]['photo_name']); 
    } 

    parent::beforeValidate($options); 
} 

以及它不是我的代码,我忘记了它的来源。

+0

不适合我...不上传,文件路径未被发送到数据库 –

+0

您正在使用哪个CakePHP版本?有没有错误信息?尝试更改为$ uploadDir ='img'; –

+0

我正在使用2.4.6稳定,没有任何错误。这种改变并没有改变,我认为这只是文件存储的目录。由于路径没有被保存,所以我认为其他的东西是错误的 –

相关问题