Codeigniter 3-Ajax文件上传(您没有选择要上传的文件)
Codeigniter 3 - Ajax File Upload (You did not select a file to upload)
控制器:
function post()
{
if(!$this->input->is_ajax_request())
{
show_404();
exit;
}
$data['result'] = false;
$config['upload_path'] = base_url().'userfiles/customer';
$config['allowed_types'] = 'pdf';
$config['max_size'] = 100000;
$this->load->library('upload', $config);
$file = $this->input->post('userfile');
if ( ! $this->upload->do_upload($file))
{
$data['result'] = true;
$error = array('error' => $this->upload->display_errors());
$data['error'] = $error;
}
else
{
$data['result'] = true;
$data_upload = array('upload_data' => $this->upload->data());
$data['success'] = $data_upload;
}
echo json_encode($data);
}
视图:
<div class="form">
<div class="form-group">
<label class="form-label" for="package">Package :</label>
<select class="package form-control" id="package" name="package">
<option value="none">Please select..</option>
<?php foreach($package as $row) { ?>
<option value="<?php echo $row['id_order_package'] ?>"><?php echo $row['name'] ?></option>
<?php } ?>
</select>
<div class="error" id="msg_package"></div>
</div>
<div class="form-group">
<label class="form-label" for="price">Price ( Rp ) :</label>
<input type="text" class="form-control" name="price" id="price" placeholder="" disabled>
<div class="error" id="msg_price"></div>
</div>
<div class="form-group">
<label class="form-label" for="days">Days :</label>
<input type="text" class="form-control" name="days" id="days" placeholder="" disabled>
<div class="error" id="msg_days"></div>
</div>
<div class="form-group">
<label class="form-label" for="userfile">File :</label>
<input type="file" id="userfile" name="userfile" class="form-control">
<div class="error" id="msg_userfile"></div>
</div>
<div class="form-group">
<label class="form-label" for="description">Description :</label>
<textarea class="form-control" rows="5" name="description" id="description"></textarea>
<div class="error" id="msg_description"></div>
</div>
<div class="form-group center">
<div class="btn btn-primary">ORDER</div>
</div>
</div>
Javascript:
$('.btn').click(function(e){
$('#msg_package').html(' ');
$('#msg_userfile').html(' ');
$('#msg_description').html(' ');
if($('#package').val() == 'none') {
$('#msg_package').html('Please select package');
} else if($('#userfile').val() == '') {
$('#msg_userfile').html('This field is required');
} else if($('#description').val() == '') {
$('#msg_description').html('This field is required');
} else {
$.ajax({
url : '<?php echo base_url() ?>account_order/add/post',
type : 'POST',
dataType: 'json',
mimeType:"multipart/form-data",
processData: false,
data : { userfile: $('#userfile')[0].files , price: $('#price').val() , days: $('#days').val() },
success: function( data ) {
if(!data['result']){
}else{
alert(data['error']);
}
}
});
}
});
但是,我收到一个错误
{"result":true,"error":{"error":"<p>You did not select a file to upload.<'/p>"}}
我试着发布数据&文件,但它不起作用。我的问题是如何修复这个错误?为什么控制器无法读取用户文件的内容?
感谢
尝试将您的输入放入表单中,并给出表单id="your_form_id",然后以这种方式在javascript:中发送数据
var data = new FormData(document.getElementById("your_form_id"));
然后更换这条线路data : { userfile: $('#userfile')[0].files , price: $('#price').val() , days: $('#days').val() },
用这个data: data,
也在data: data,
:之后设置
async: false,
processData: false,
contentType: false,
相关文章:
- 仅使用文件对象选择单个文件
- 计算用户从多个文件中选择的选项数量
- 如何显示在输入类型文件中选择的文件
- 添加选项以使用 javascript 从 json 文件中选择字段
- 检测在与先前选择的文件相同的文件上选择的文件
- Javascript:当元素中有<选择>时,可拖动元素搞砸了
- 如何设置视频文件的预览,从输入类型='文件'中选择
- 使用文件输入选择多个 FIle 时删除单个文件
- 有选择地使用 MathJax 渲染方程
- 从 JSON 文件中选择特定数组
- jQuery中的文件夹选择器
- 使 WebStorm 忽略 .spec.js 文件的“选择声明”下拉列表
- 当用户在 html 文件中选择某些文本时执行 JavaScript 函数
- 有选择地激活按钮
- dist/文件夹中的JS文件和root中的JS文件有什么区别
- 在剑道网格中有选择地将编辑行中的单元格切换为编辑模式
- 是否可以有选择地限制 iframe 对其父文档的访问
- 如何告诉DDP有选择地观察更改某些字段,而不是所有定义的字段
- OneDrive for Business是否有客户端javascript库提供文件/文件夹选择器控件?
- 在jQuery中有选择文件路径的方法吗?