Php 无法以codeigniter格式上载文件
我有一个表单,允许用户输入数据和上传文件Php 无法以codeigniter格式上载文件,php,ajax,codeigniter,file-upload,upload,Php,Ajax,Codeigniter,File Upload,Upload,我有一个表单,允许用户输入数据和上传文件 <form enctype="multipart/form-data" id="form"> <input type="file" id="fileImage" class="fileImage" name="fileImage" > <button type="submit" id="save" class="save-icon-btn"> Submit </button> </
<form enctype="multipart/form-data" id="form">
<input type="file" id="fileImage" class="fileImage" name="fileImage" >
<button type="submit" id="save" class="save-icon-btn">
Submit
</button>
</form>
我希望添加一个上传功能,允许用户上传一个单独的类别,但在相同的形式更多的文件。所以新的形式应该是
<form enctype="multipart/form-data" id="form">
<input type="file" id="fileImage" class="fileImage" name="fileImage" >
<input type="file" id="fileReport" class="fileReport" name="fileReport" >
<button type="submit" id="save" class="save-icon-btn">
Submit
</button>
</form>
但是,我无法理解如何更改ajax代码,以便它能够发送数据
由于更新了表单和后端代码,我无法保存这两个文件。只上载文件映像,而不上载文件报告 ajax代码:
var form_data = new FormData($('#form')[0]);
form_data.append('my_file3[]', $('input[type=file]')[0].files[0]);
form_data.append('my_file3[]', $('input[type=file]')[1].files[0]);
jQuery.ajax(
{
type: "POST",
url: "<?php echo base_url(); ?>" + "class/student",
data: form_data,
async : false,
cache : false,
processData: false,
contentType: false,
success: function(res)
{
console.log(res);
alert(res);
}
});
var form_data=new FormData($('#form')[0]);
表单_data.append('my_file3[]',$('input[type=file]')[0].files[0]);
表单_data.append('my_file3[]',$('input[type=file]')[1]。文件[0]);
jQuery.ajax(
{
类型:“POST”,
url:“+”班级/学生“,
数据:表格数据,
async:false,
cache:false,
processData:false,
contentType:false,
成功:功能(res)
{
控制台日志(res);
警报(res);
}
});
在以下代码中:
$cpt = count ($_FILES['my_file3']['name']);
$target_dir = 'assets/files';
$this->common_lib->make_dir_if_not($target_dir);
for($i = 0; $i < $cpt; $i ++) {
$_FILES['images']['name'] = $_FILES['my_file3']['name'][$i];
$_FILES['images']['type'] = $_FILES['my_file3']['type'][$i];
$_FILES['images']['tmp_name'] = $_FILES['my_file3']['tmp_name'][$i];
$_FILES['images']['error'] = $_FILES['my_file3']['error'][$i];
$_FILES['images']['size'] = $_FILES['my_file3']['size'][$i];
$config = $this->common_lib->set_upload_config($target_dir);
$this->load->library('upload');
$this->upload->initialize($config);
if($this->upload->do_upload("images")){
$fileName = $_FILES['images']['name'];
$images[] = $fileName;
$my_file .= $fileName;
}
}
$cpt=count($_文件['my_文件3']['name']);
$target_dir='资产/文件';
$this->common\u lib->make\u dir\u if\u not($target\u dir);
对于($i=0;$i<$cpt;$i++){
$\u文件['images']['name']=$\u文件['my\u file3']['name'][$i];
$\u文件['images']['type']=$\u文件['my\u file3']['type'][$i];
$\u文件['images']['tmp\u name']=$\u文件['my\u file3']['tmp\u name'][$i];
$\u文件['images']['error']=$\u文件['my\u file3']['error'][$i];
$\u文件['images']['size']=$\u文件['my\u file3']['size'][$i];
$config=$this->common\u lib->set\u upload\u config($target\u dir);
$this->load->library('upload');
$this->upload->initialize($config);
如果($this->upload->do_upload(“图像”)){
$fileName=$_文件['images']['name'];
$images[]=$fileName;
$my_file.=$fileName;
}
}
**我为邮件设置、上传设置、创建目录等常用功能创建了公共库(common_lib)。您可以使用自定义配置。请尝试以下代码。如果有效的话,我会详细说明
print_r($_FILES); // show me this if it doesn't work
$this->load->library('upload');
$config['upload_path'] = './assets/student/.';
$config['allowed_types'] = 'gif|jpg|png|doc|txt';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;
$this->upload->initialize($config);
if (!$this->upload->do_upload('fileImage'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else
{
$data = $this->upload->data();
}
$config1['upload_path'] = './assets/report/.';
$config1['allowed_types'] = 'gif|jpg|png|doc|txt';
$config1['max_size'] = 1024 * 8;
$config1['encrypt_name'] = TRUE;
$this->upload->initialize($config1, true);
if (!$this->upload->do_upload('fileReport'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else
{
$data = $this->upload->data();
}
添加了给定的参数,但只有1个文件以编写代码的方式上载,您一次只能上载一个文件。您应该解释这意味着什么以及如何解决此问题。@ezw您能看一下更新的文件吗post@sorak我已经更新了帖子,你能看一下吗?@Vishnu Bhadoriya,当我使用新表单时,你会面临什么问题?在使用新表单的同时,我会使用两次后端代码更改名称,则只上载1个图像。您只发送和处理1个文件。您必须发送这两个文件并分别处理它们,因为codeigniter上载库一次只发送一个文件。你有正确的逻辑,你只需要复制它(本质上)。这也是你的问题:。。。你真的不该重复questions@Alex我已经更新了帖子,你给出的链接不是我的,但是是的,我正在关注它,因为它和我的情况是一样的
var form_data = new FormData($('#form')[0]);
form_data.append('my_file3[]', $('input[type=file]')[0].files[0]);
form_data.append('my_file3[]', $('input[type=file]')[1].files[0]);
jQuery.ajax(
{
type: "POST",
url: "<?php echo base_url(); ?>" + "class/student",
data: form_data,
async : false,
cache : false,
processData: false,
contentType: false,
success: function(res)
{
console.log(res);
alert(res);
}
});
$cpt = count ($_FILES['my_file3']['name']);
$target_dir = 'assets/files';
$this->common_lib->make_dir_if_not($target_dir);
for($i = 0; $i < $cpt; $i ++) {
$_FILES['images']['name'] = $_FILES['my_file3']['name'][$i];
$_FILES['images']['type'] = $_FILES['my_file3']['type'][$i];
$_FILES['images']['tmp_name'] = $_FILES['my_file3']['tmp_name'][$i];
$_FILES['images']['error'] = $_FILES['my_file3']['error'][$i];
$_FILES['images']['size'] = $_FILES['my_file3']['size'][$i];
$config = $this->common_lib->set_upload_config($target_dir);
$this->load->library('upload');
$this->upload->initialize($config);
if($this->upload->do_upload("images")){
$fileName = $_FILES['images']['name'];
$images[] = $fileName;
$my_file .= $fileName;
}
}
print_r($_FILES); // show me this if it doesn't work
$this->load->library('upload');
$config['upload_path'] = './assets/student/.';
$config['allowed_types'] = 'gif|jpg|png|doc|txt';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;
$this->upload->initialize($config);
if (!$this->upload->do_upload('fileImage'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else
{
$data = $this->upload->data();
}
$config1['upload_path'] = './assets/report/.';
$config1['allowed_types'] = 'gif|jpg|png|doc|txt';
$config1['max_size'] = 1024 * 8;
$config1['encrypt_name'] = TRUE;
$this->upload->initialize($config1, true);
if (!$this->upload->do_upload('fileReport'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else
{
$data = $this->upload->data();
}