php - `$this->upload->do_upload()` 无法使用 ajax
问题描述
我有一个项目 codeigniter,我将使用 ajax 提交表单。我的第一个问题$this->upload->do_upload
总是错误的。我确实搜索了一些答案,但我无法完成工作。
我试过这个链接来解决我的问题,但没有帮助。
希望有人可以帮助我。下面是我的代码。
看法
<form id="form-register" enctype="mutlipart/form-data" action="" method="POST">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<div class="form-group form-file-upload form-file-multiple ">
<input type="file" class="inputFileHidden" name="client_img" id="client_img">
<div class="fileinput-new thumbnail img-raised">
img class="img-fluid" src="<? echo base_url();?>assets/img/person.png" alt="client-img" />
</div>
<div class="input-group mt-2">
<span class="input-group-btn">
<button type="button" class="btn btn-fab btn-round btn-primary">
<i class="material-icons">attach_file</i>
</button>
</span>
<input type="text" class="form-control inputFileVisible" placeholder="Choose client picture.." require>
</div>
</div>
</div>
</div>
控制器.php
public function register_client()
{
$validator = array('success' => false, 'messages' => array());
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'jpg|png|jpeg|gif';
$config['encrypt_name'] = TRUE;
$this->load->library('upload',$config);
if(!$this->upload->do_upload('client_img')){
$validator['success'] = false;
$validator['messages'] = $this->input->post('client_img');
}else{
$data = $this->upload->data();
//Resize and Compress Image
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/'.$data['file_name'];
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = FALSE;
$config['quality'] = '60%';
$config['width'] = 600;
$config['height'] = 400;
$config['new_image'] = './uploads/'.$data['file_name'];
$this->load->library('image_lib', $config);
$this->image_lib->resize();
$client_data = array(
'account_no' => 1000,
'client_img' => $data['file_name'],
'mname' => $this->input->post('mname'),
'gname' => $this->input->post('gname'),
'lname' => $this->input->post('lname'),
'email' => $this->input->post('email'),
'number1' => $this->input->post('number1'),
'number2' => $this->input->post('number2'),
'purok_no' => $this->input->post('purok_no'),
'barangay' => $this->input->post('barangay'),
'city' => $this->input->post('city'),
'postal_code' => $this->input->post('postal_code'),
'birthdate' => $this->input->post('birthdate'),
'gender' => $this->input->post('inlineRadioOptions'),
'info' => $this->input->post('info')
);
$insert_data = $this->claims_model->insert_client($client_data);
if($insert_data == true){
$validator['success'] = true;
$validator['messages'] = 'loan';
}else{
$validator['success'] = false;
$validator['messages'] = 'Something went wrong';
}
}
echo json_encode($validator);
}
Ajax.js
$(document).ready(function(e) {
$(".client-save").click(function(e) {
e.preventDefault();
var formdata = new FormData(document.getElementById("form-register"));
if (formdata) {
$.ajax({
type: "POST",
url: "register",
dataType: "json",
data: formdata,
processData: false,
contentType: false,
cache: false,
success: function(response) {
if (response.success == true) {
alert(response.messages);
} else {
showNotification("top", "right", response.messages);
}
}
});
}
});
});
希望有人可以解决我的问题。我尝试修改了ajax代码,但仍然
$this->upload->do_upload()
仍然是假的。
解决方案
您可以调用 display_errors() 方法来帮助您进行调试,只需在返回响应的位置添加以下内容:
echo "<pre>";
die(var_dump( $this->upload->display_errors() ));
echo "</pre>";
此外,如果您在 mac/linux 上,请确保您对上传文件夹具有写入权限,您还应该在写入之前检查它是否存在:
if (!is_dir('uploads')) {
mkdir('./uploads', 0777, true);
}
推荐阅读
- c# - VB.NET 中的 LINQ Any Query 是什么?
- angular - 我应该如何在 Angular 中连接这些对象?
- amazon-web-services - AWS Connect 的编程触发器 - 代理联系流
- php - Laravel - 计算多个时间条目的总时间
- firebase - 如何在 Firebase 云功能中获取经过验证的电话号码?
- javascript - react-router-dom: 无效的钩子调用,钩子只能在函数组件的主体内部调用
- mysql - 如何进行带来当天结果的查询
- javascript - 使用 Javascript 切换嵌套的侧边栏
- numpy - 创建使用 NumPy 数组的自定义 Keras/Tensorflow 函数
- git - 执行 git-archive 时如何仅获取根目录(和另一个子目录)