Загрузка входного изображения в формате AJAX в Cakephp - PullRequest
0 голосов
/ 12 декабря 2011

Я загружаю файл изображения через плагин 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 голос
/ 12 декабря 2011

Проблема здесь:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...