CodeIgniter+Ajax文件上传报错‘未选择上传文件’求助
解决CodeIgniter + Ajax文件上传报错“You did not select a file to upload.”
嘿,我来帮你排查下问题,这个报错我之前做项目时也碰到过,主要是几个细节没处理对,咱们一步步来改:
问题排查与修复步骤
1. JavaScript端:用FormData封装文件(关键!)
你现在用普通对象data = {}存文件,这没法正确处理文件上传需要的multipart/form-data格式,必须用FormData对象来封装文件数据。修改后的JS代码如下:
uploadFile(){ let formData = new FormData(); // 把文件追加到FormData里,字段名和后端要对应 formData.append('file', document.getElementById('fileToUpload').files[0]); $.ajax({ url:'/admin/conference/presentation/changes/file', data: formData, type: 'POST', contentType: false, processData: false, success: function(data){ console.log(data); }, error: function(xhr){ console.log(xhr.responseText); // 加个错误回调,方便看更多报错细节 } }); }
2. CodeIgniter端:修正拼写错误+指定上传字段名
你代码里有个明显的拼写错误,还有字段匹配的问题:
$config['upload_path'] = FCPATH.'./'; $config['allowed_types'] = '*'; // 把allowed_tyeps改成allowed_types,拼写错了! $this->load->library('upload', $config); // do_upload()默认找名为userfile的字段,你传的是file,所以要明确指定字段名 if(!$this->upload->do_upload('file')){ $upload_error = $this->upload->display_errors(); // 补全display_errors()方法 echo json_encode(['status' => 'error', 'message' => $upload_error]); } else { $upload_data = $this->upload->data(); echo json_encode(['status' => 'success', 'data' => $upload_data]); }
额外小提示
- 确保你的HTML文件输入框id和name都对应上,比如:
<input type="file" id="fileToUpload" name="file">
- 检查服务器上传目录的权限,确保CodeIgniter有写入权限,避免上传成功但文件存不进去的问题。
内容的提问来源于stack exchange,提问作者bob342
相关产品推荐
相关产品推荐

