2011-12-12 107 views
0

我通过AJAX ajaxFileUpload插件上传图像文件,该插件使用iframe提交文件。我已经成功地将文件上传到我的控制器,并且我可以看到tmp_name,name,error = 0等,但是当我使用这个$ this-> data ['Card'] ['tmp_name']和move_uploaded_file时,它始终返回false的路径是正确的......我不确定从这一点起。在Cakephp中上传AJAX文件输入图像

下面是到目前为止我的代码为视图文件...

function ajaxFileUpload() { 
    $.ajaxFileUpload({ 
     url: '/cards/ajaxFrontCardUpload', 
     secureuri: false, 
     fileElementId: 'CardUploadFront', 
     dataType: 'json', 
     success: function (data, status) { 
      console.log(data); 
      $('#uploadFrontImage').attr('src', data.tmp_path); 
     }, 
     error: function (data, status, e) { 
      alert(e); 
     } 
    }) 
    return false; 
} 

$('#CardUploadFront').live('change', function() { 
    ajaxFileUpload(); 
}); 

echo $form->file('Card.uploadFront', array('class'=>'file')); 

下面是控制器功能:

public function ajaxFrontCardUpload() { 
     $this->layout = 'ajax'; 
     $tmp_name = $this->data['Card']['uploadFront']['tmp_name']; 
     $tmp_name = $this->data['Card']['uploadFront']['tmp_name'].'/'.$this->data['Card']['uploadFront']['name']; 
     $json_response['tmp_path'] = '/img/cards/temp/'.time().'.png'; 
     if(move_uploaded_file($tmp_name, $json_response['tmp_path'])){ 
      $json_response['response'] = 'true'; 
     }else{ 
      $json_response['response'] = 'false'; 
     } 
     $this->set(compact('json_response')); 
    } 

任何想法的家伙?

回答

1

的问题是在这里:

public function ajaxFrontCardUpload() { 
     $this->layout = 'ajax'; 
     $tmp_name = $this->data['Card']['uploadFront']['tmp_name']; 
     $tmp_name = $this->data['Card']['uploadFront']['tmp_name'].'/'.$this->data['Card']['uploadFront']['name']; 
//notice here that $tmp_name now no longer references the path to the uploaded file 
     $json_response['tmp_path'] = '/img/cards/temp/'.time().'.png'; 
     if(move_uploaded_file($tmp_name, $json_response['tmp_path'])){ 
      $json_response['response'] = 'true'; 
     }else{ 
      $json_response['response'] = 'false'; 
     } 
     $this->set(compact('json_response')); 
    } 

到上传文件的路径存储在$this->data['Card']['uploadFrom']['tmp_name']。 当你附加'/'.$this->data['Card']['uploadFront']['name']时,你的$tmp_name变量不再指向上传的文件。这就是为什么move_uploaded_file返回false。