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

CodeIgniter路由配置后失效,图片上传接口出现404页面未找到

解决CodeIgniter中Dropzone图片上传404及功能失效问题

看起来你遇到的核心问题是路由匹配失败导致的404错误,还有几个代码细节需要调整才能让Dropzone上传正常工作,我一步步给你拆解:

1. 首先修正请求URL和路由配置

你配置的路由是:

$route['image-upload']['post'] = 'property/uploadImages';

但你调用的接口地址是http://www.cerdvillas.dev.cc/admin/image-upload/post,这里有两个明显错误:

  • CodeIgniter的HTTP方法路由是指定请求的方法类型(比如POST),不需要把post放到URL末尾;
  • 如果你的Property控制器是在admin子目录下(比如application/controllers/admin/Property.php),路由需要加上admin前缀,否则框架找不到对应的控制器。

正确的路由配置(二选一):

  • 如果控制器在根目录(application/controllers/Property.php):

    $route['image-upload']['post'] = 'property/uploadImages';
    

    对应的请求URL应该是:http://www.cerdvillas.dev.cc/image-upload(必须用POST方法发送)

  • 如果控制器在admin子目录:

    $route['admin/image-upload']['post'] = 'admin/property/uploadImages';
    

    对应的请求URL是:http://www.cerdvillas.dev.cc/admin/image-upload(POST方法)

2. 修复.htaccess中的重复规则

你的.htaccess里有两段几乎一样的Rewrite规则,这会导致URL重写冲突,干扰路由解析。建议简化成如下版本:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks -Indexes
    RewriteEngine On

    # 排除实际存在的文件和目录,避免重写静态资源
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # 重写所有请求到index.php,确保路由能被CodeIgniter处理
    RewriteRule ^(.*)$ index.php/$1 [L]

    # 禁止访问系统目录和版本控制文件,提升安全性
    RedirectMatch 403 ^/(system|\.git|\.hg).*$
</IfModule>

3. 修正Property控制器uploadImages方法的问题

你的控制器方法有几个逻辑错误,会导致上传失败或者无响应,调整后的代码如下:

function uploadImages() {
    $this->load->helper('url');
    // 用REQUEST_METHOD判断POST请求,比判断post数据更可靠
    if($this->input->server('REQUEST_METHOD') === 'POST'){
        $config['upload_path'] = './property-images/'; // 加./确保相对路径正确
        $config['allowed_types'] = 'jpg|jpeg|png|gif';
        $config['max_size'] = '2048'; // 单位KB
        
        // 先加载一次上传库,不要在循环里重复加载
        $this->load->library('upload');
        
        $result = array('success' => false, 'uploaded_files' => array(), 'errors' => array());
        
        // 处理多文件上传,重置$_FILES为单个文件结构
        foreach($_FILES['file']['name'] as $key => $value) {
            $_FILES['userfile']['name'] = $_FILES['file']['name'][$key];
            $_FILES['userfile']['type'] = $_FILES['file']['type'][$key];
            $_FILES['userfile']['tmp_name'] = $_FILES['file']['tmp_name'][$key];
            $_FILES['userfile']['error'] = $_FILES['file']['error'][$key];
            $_FILES['userfile']['size'] = $_FILES['file']['size'][$key];
            
            $config['file_name'] = $_FILES['userfile']['name'];
            $this->upload->initialize($config); // 重新初始化上传配置
            
            if($this->upload->do_upload('userfile')) {
                $uploadData = $this->upload->data();
                $filename = $uploadData['file_name'];
                $imgPath = 'property-images/' . $filename; // 补全缺失的$imgPath变量
                
                $propertyId = 1; // 这里建议从POST参数获取实际的房产ID,不要硬编码
                $imageData = array('path'=>$imgPath, 'propertyid'=>$propertyId);
                
                $dbResult = $this->property_model->uploadImages($imageData);
                if($dbResult){
                    $result['success'] = true;
                    $result['uploaded_files'][] = $filename;
                }
            } else {
                // 收集错误信息,方便调试
                $result['errors'][] = $this->upload->display_errors('', '');
            }
        }
        
        // Dropzone需要JSON格式的响应,输出JSON而不是直接return
        $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($result));
    } else {
        // 非POST请求返回405方法不允许错误
        $this->output->set_status_header(405);
    }
}

主要修正点:

  • 上传路径加上./确保相对路径正确,同时要保证property-images/目录存在且有写入权限;
  • 循环处理多文件时,重置$_FILES为单个文件结构,并用initialize()重新加载配置;
  • 补全了缺失的$imgPath变量;
  • 输出JSON格式响应,Dropzone需要接收这类响应才能确认上传状态;
  • 增加错误信息收集,方便排查上传失败原因。

4. 检查Dropzone前端配置

确保你的Dropzone初始化代码中,url参数指向正确的接口地址,比如:

Dropzone.options.imageDropzone = {
    url: "/admin/image-upload", // 对应你配置的路由URL
    method: "post",
    paramName: "file", // 要和控制器中处理的文件名一致
    maxFilesize: 2, // 对应后端配置的2048KB
    acceptedFiles: "image/jpeg,image/png,image/gif",
    // 其他自定义配置...
};

按照上面的步骤调整后,应该能解决404错误和上传失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:12:51