php - 文件上传在 Codeigniter 控制器中获取空值
问题描述
我正在尝试在 Codeigniter 中使用 ajax 上传图像而没有表单提交我的 html 代码是
<div class="profile-img">
<img class="" src="<?php echo base_url() ?>assets/dist/img/<?php echo $adminData->image ?> " alt="User profile picture">
<div class="file btn btn-lg btn-primary">
Change Photo
<input type="file" name="profile_img" id="profile_img"/>
</div>
<span id="uploaded_image"></span>
</div>
使用此代码,我使用给定代码在更改事件上发送 ajax
$('#profile_img').change(function () {
var file_data = $('#profile_img')[0].files;
var form_data = new FormData();
form_data.append('profile_img',file_data);
var admin_id= <?php echo (int)$adminData->admin_id ?>;
$.ajax({
url: "<?php echo base_url(); ?>admin/upload_image",
method: "GET",
data: {admin_id: admin_id, form_data: form_data},
contentType: false,
cache: false,
processData: false,
beforeSend: function ()
{
$('#uploaded_image').html("<label class='text-success'>Uploading...</label>");
},
success: function (data)
{
$('#uploaded_image').html(data);
}
})
});
它工作正常,但是当我们点击控制器时,它的 admin_id 和 form_data 都获得空值我的实际问题在这里我仍然尝试获取值,但它总是给出空值我的控制器代码是
function upload_image() {
$data['admin_id'] = $this->input->post('admin_id');
if (isset($_FILES['form_data']['name'])) {
$config1['upload_path'] = 'assets/dist/img/';
$config1['overwrite'] = TRUE;
$config1['allowed_types'] = 'gif|jpg|png|jpeg';
$config1['file_name'] = $_FILES['form_data']['name'];
$this->load->library('upload', $config1);
$this->upload->initialize($config1);
if (!$this->upload->do_upload('form_data')) {
$error = array('error' => $this->upload->display_errors());
} else {
$fileData = $this->upload->data();
$data['image'] = $fileData['file_name'];
}
}
$this->admin_mod->update_image($data);
}
谁能建议我我哪里错了。
解决方案
您将 FileList 传递给FormData.append
您必须传递一个 File。您可以像在数组中一样传递列表中的第一个文件。
var file_data = $('#profile_img')[0].files[0];
您的文件也会在profile_img
您尝试读取时发送form_data
if (isset($_FILES['profile_img']['name'])) {
推荐阅读
- python - PiCamera - 如何将“rgb”格式的 np.array 捕获保存到文件中?
- sql - PostgreSQL 随机子查询
- javascript - 我应该使用哪个功能?.toDataURL() 还是 .toBlob()?
- android - Android VideoView 不会在树莓派上播放视频
- google-apps-script - Ebay API:ActiveInventoryReport 数据
- typo3 - 如何在文件夹中隐藏后端布局
- failovercluster - 将 Hypervisor 添加回故障转移集群
- ios - 如何使 Xcode segues 不可逆?
- android - Constraint Layout中对多个视图进行分组,只设置一个点击监听
- javascript - eventemitter.emit 方法不会在节点 js 中返回