上传Image并将Filepath保存到数据库Cakephp

时间:2014-03-27 03:19:29

标签: database 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>

非常感谢任何帮助

1 个答案:

答案 0 :(得分: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);
}
好吧,这不是我的代码,我忘记了我得到它的来源。