首页 文章

在Cakephp中上传AJAX文件输入图像

提问于
浏览
0

我正在通过AJAX ajaxFileUpload插件上传图像文件,该插件使用iframe提交文件 . 我已成功将文件上传到我的控制器,我可以看到tmp_name,name,error = 0等但是当我使用这个$ this-> data ['Card'] ['tmp_name']时,使用move_uploaded_file它总是返回false路径是正确的......从现在开始我不确定 .

以下是我目前为止查看文件的代码...

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 回答

  • 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的原因 .

相关问题