Загрузка изображения входного файла AJAX в CakePHP

Я загружаю файл изображения через плагин 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 ответ

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

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.

licensed under cc by-sa 3.0 with attribution.