Cakephp 3.3 中的文件上传

File upload in Cakephp 3.3

我正在尝试在 cakephp 3.0 中存储图像。我只能将文件名保存在 db 中,但是无法将实际文件存储在服务器上。需要帮助

表格:

        echo $this->Form->create('User', array('url' => array('action' => 'create'), 'enctype' => 'multipart/form-data'));
        echo $this->Form->input('upload', array('type' => 'file'));

图像控制器:

 */
public function add()
{
    $image = $this->Images->newEntity();
    //Check if image has been uploaded
    if(!empty($this->request->data['Images']['upload']['name']))
    {
        $file = $this->request->data['Images']['upload']; //put the data into a var for easy use

        $ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
        $arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions

        //only process if the extension is valid
        if(in_array($ext, $arr_ext))
        {
            //do the actual uploading of the file. First arg is the tmp name, second arg is
            //where we are putting it
            move_uploaded_file($file['tmp_name'], WWW_ROOT . 'img' . $file['name']);

            //prepare the filename for database entry
            $this->data['Images']['image'] = $file['name'];
        }
    }

    if ($this->request->is('post')) {
        $image = $this->Images->patchEntity($image, $this->request->data);
        if ($this->Images->save($image)) {
            $this->Flash->success('The image has been saved.');
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error('The image could not be saved. Please, try again.');
        }
    }
    $this->set(compact('image'));
    $this->set('_serialize', ['image']);
}

欢迎使用 Whosebug!

请检查这个问题:

这对你有帮助,这是一个很好的上传图片的插件: http://cakemanager.org/docs/utils/1.0/behaviors/uploadable/

对于那些正在寻找答案的人,只需修改这一行:

move_uploaded_file($file['tmp_name'], WWW_ROOT . 'img' .DS. $file['name']);

DS 是目录分隔符。