You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter Ajax文件上传报错:you did not select a file to upload求助

解决CodeIgniter Ajax文件上传提示“you did not select a file to upload”的问题

嘿,我一眼就发现了问题所在——你的Ajax提交逻辑里用了serialize()方法,这个方法只能处理普通的文本表单字段,完全没办法处理文件类型的输入!这就导致后端的CodeIgniter Upload类根本接收不到suratMasuk这个文件参数,自然会抛出那个“you did not select a file to upload”的错误。

下面给你一步步修复:

1. 替换Ajax提交逻辑,改用FormData处理文件

把你的Javascript函数改成下面这样,核心是用FormData来封装整个表单数据(包括文件):

function insertSuratMasuk() {
    event.preventDefault();
    // 直接基于表单元素创建FormData对象,自动包含所有字段和文件
    var formData = new FormData($('#tambahSuratMasuk')[0]);
    
    $.ajax({
        url: '<?php echo base_url('index.php/surat_masuk/addSuratMasuk'); ?>',
        type: 'POST',
        dataType: 'json',
        data: formData,
        // 这两个参数必须设置,否则文件无法正确传递
        contentType: false,
        processData: false,
        success: function (r) {
            if(r.error == ''){
                if(r.status == true){
                    swal('Insert data success', '', 'success');
                } else if (r.status == false) {
                    swal('Insert data failed', '', 'danger')
                }
            } else {
                swal('Insert data failed', r.error, 'warning')
            }
        },
        // 新增错误处理,方便调试请求层面的问题
        error: function(xhr, status, error) {
            swal('Request Error', error, 'error');
        }
    })
}

2. 确认其他配置没问题(你的代码其实已经做对了,只是再核对下)

  • 你的表单已经正确设置了enctype="multipart/form-data",这是文件上传的必要前提,这点很棒。
  • 控制器里do_upload('suratMasuk')的参数,和视图中文件输入框的name="suratMasuk"完全一致,没有问题。
  • 记得确认./uploads/目录存在且有写入权限(如果目录不存在或权限不足,后续也会导致上传失败,但当前的错误核心是文件没传到后端,所以先解决FormData的问题)。

为什么这样改?

  • FormData是HTML5提供的专门用于处理包含文件的表单数据的对象,它能正确封装文件流,让后端可以识别到文件参数。
  • contentType: false:告诉jQuery不要自动设置请求头的Content-Type,让浏览器自动生成包含boundary的正确头信息,这样后端才能解析出文件。
  • processData: false:告诉jQuery不要把FormData转换成普通的字符串格式,保持其原始的二进制格式传递。

改完之后再测试,应该就能正常上传文件,不会再出现那个烦人的错误提示了!

内容的提问来源于stack exchange,提问作者Wahaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:44:57