Я попытался загрузить файл с помощью Codeigniter и AJAX, но моя форма всегда показывает ошибку:
путь загрузки неверен.
Модель
public function save($data) { $this->db->insert($this->table, $data); return $this->db->insert_id(); }
контроллер
public function ajax_add(){ $this->_validate(); $data = array( 'nama'=>$this->input->post('post_nama'), 'jenis_kelamin'=>$this->input->post('post_jk'), 'alamat'=>$this->input->post('post_alamat'), 'email'=>$this->input->post('post_email'), 'telepon'=>$this->input->post('post_telepon'), 'status'=>$this->input->post('post_status') ); if(!empty($_FILES['photo']['name'])) { $upload = $this->_do_upload(); $data['photo'] = $upload; } $insert = $this->post->save($data); echo json_encode(array("status" => TRUE)); } private function _do_upload() { $config['upload_path'] = './upload/profil/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = 1000; //set max size allowed in Kilobyte $config['max_width'] = 3000; // set max width image allowed $config['max_height'] = 1500; // set max height allowed $config['file_name'] = round(microtime(true) * 1000); $this->load->library('upload', $config); if(!$this->upload->do_upload('photo')) //upload and validate { $data['inputerror'][] = 'photo'; $data['error_string'][] = 'Upload error: '.$this->upload->display_errors('',''); //show ajax error $data['status'] = FALSE; echo json_encode($data); exit(); } return $this->upload->data('file_name'); }
Посмотреть
<form action="#" id="form" method="post" enctype="multipart/form-data"> <div class="form-group"> <label class="control-label">Foto</label> <input name="photo" type="file" id="photo"> <span class="help-block"></span> </div> <div class="form-group"> <button type="button" id="btnSave" onclick="insert()" class="btn btn-success"> <span class="glyphicon glyphicon-floppy-disk"></span> Simpan </button> <button type="reset" class="btn btn-default"> <span class="glyphicon glyphicon-floppy-disk"></span> Clear </button> </div>
Ajax
url = "<?php echo site_url('profil/ajax_add')?>"; // ajax adding data to database var formData = new FormData($('#form')[0]); $.ajax({ url : url, type: "POST", data: formData, contentType: false, processData: false, dataType: "JSON", success: function(data) { if(data.status) //if success close modal and reload ajax table { alert('Data Berhasil disimpan'); reset_form(); } else { for (var i = 0; i < data.inputerror.length; i++) { $('[name="'+data.inputerror[i]+'"]').parent().parent().addClass('has-error'); //select parent twice to select div form-group class and add has-error class $('[name="'+data.inputerror[i]+'"]').next().text(data.error_string[i]); //select span help-block class set text error string } } $('#btnSave').text('save'); //change button text $('#btnSave').attr('disabled',false); //set button enable }, error: function (jqXHR, textStatus, errorThrown) { alert('Error adding / update data'); $('#btnSave').text('save'); //change button text $('#btnSave').attr('disabled',false); //set button enable } }); }
Когда я нажимаю кнопку сохранения в своей форме, форма всегда показывает эту ошибку:
Ошибка загрузки: путь загрузки не отображается.
на общедоступном сервере хостинга (например, хостинг-провайдеры), вам необходимо предоставить наиболее вероятный полный относительный путь к вашей папке загрузки, которая отличается от среды localhost. Также убедитесь, что у вас есть все права на запись файла в этот каталог
вы можете использовать в среде localhost
$config['upload_path'] = './upload/profil';
но на общем хостинге вам нужно будет уточнить, что-то вроде
$config['upload_path'] = '/home/yourserver/public_html/upload/profil';
Вы можете найти этот файл upload_path, например, на главной странице cPanel для учетных записей в левом столбце или, возможно, захотите позвонить в службу поддержки ваших поставщиков для получения дополнительной информации о правильном пути
Измените свой путь
$config['upload_path'] = './upload/profil/';
в
$config['upload_path'] = 'base_url("upload/profil/")';