Cakephp 2x上传图片

时间:2017-05-31 00:58:56

标签: php cakephp cakephp-2.9

我正在尝试将图片上传到我的本地文件夹

  

根目录/ IMG /

并将图像名称保存到数据库。一切似乎都很好但图像没有保存到路径

这是我的观点

<?php echo $this->Form->create(null,['url' => ['controller' => 'users', action' => 'update_image'],
array('enctype'=>'multipart/form-data')]); ?>
<?php echo $this->Form->input('User.id') ?>
<?php echo $this->Form->file('Profile.picture',['type'=>'file']) ?>
<?php echo $this->Form->end('submit') ?>

我的控制器

public function update_image(){

    $id = $this->Auth->user('id'); 
    $this->Profile->id = $id; 
    $this->set('profile', $this->User->findById($id)); 

    if ($this->request->is(array('post','put'))) {
    $frmData = $this->request->data;

        //Path to store upload image
        $target = "/teamjob_back/img/../img/".basename($frmData['Profile']['picture']);

        //Get the data from form
        $image = $frmData['Profile']['picture'];

        //save data to database
        $this->Profile->save($this->request->data);

        //Image store to the img folder
        if (move_uploaded_file($image['tmp_name']['name'], $target)) {
            echo "Image successfull";
        }
    }
}

代码

$image['tmp_name']['name']

给了我一个非法的字符串偏移错误。

  

EDITED   此代码适用于控制器

if ($this->request->is('post')) { 
        $frmData = $this->request->data;  
        $tmp = $frmData['picture']['tmp_name']; 
        $hash = rand();
        $date = date("Ymd");
        $image = $date.$hash."-".$frmData['picture']['name'];
        $target = WWW_ROOT.'img'.DS.'uploads'.DS; 

        $target = $target.basename($image); 
        if (move_uploaded_file($tmp, $target)) {
            echo "Successfully moved"; 
        }
        else
        {
            echo "Error";
        }
    }

3 个答案:

答案 0 :(得分:0)

首先添加

['type' => 'file']

作为您文件的选项,而不是尝试发送enctype。

第二个$image$this->request->data['Profile']['picture'],因此您无法一起['tmp_name']['name'] ...调试($this->request->data['Profile']['picture']和您&#39 ;看到你可以拥有

$image['tmp_name']

$image['name']

但不是两者都在一起。

可能更多,但这些都是很好的开始。

答案 1 :(得分:0)

首先你需要删除&#34; type =&gt;文件&#34;因为你已经使用了Form helper&#34; file&#34;功能,如果我们使用&#34;表格 - >输入&#34;然后我们使用&#39; type =&gt; file&#39;

    e.g. $this->Form->input('email', array('type' => 'email'));
$this->Form->file('Profile.picture')

检查您的目标路径是否具有写权限,pr($ image)然后您获得$ image [&#39; temp_name]或$ image [0] [&#39; temp_name]等的正确数组格式。 并将temp_name放入move_uploaded_file函数

e.g. move_uploaded_file(your temp_name)

Form Helper

答案 2 :(得分:0)

确保在创建表单上载文件时包含enctype

 <?= $this->Form->create(NULL, ['enctype' => 'multipart/form-data']) ?>