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

求助:在CodeIgniter 3中如何获取第二张上传图片的路径

解决CodeIgniter 3中多文件上传(获取第二张图片路径)的问题

嘿,我来帮你搞定这个多文件上传的问题!你已经搭好了基础的上传字段,现在只需要调整下表单配置和控制器的处理逻辑,就能分别拿到两张图片的路径啦。

第一步:修正View层代码(关键:表单必须加enctype)

你之前的View里没设置表单的enctype属性,这会导致文件根本传不到后台,这是很多新手容易忽略的点!先把表单开头改成带multipart/form-data的格式:

<?php
echo form_open('你的控制器名/upload_brand', ['enctype' => 'multipart/form-data']);
?>

<div class='form-group'>
    <?php echo form_label('Brand Logo'); ?>
    <?php 
    $img = array('name' => 'brand_logo', 'class' => 'form-control');
    echo form_upload($img); 
    ?>
</div>

<div class='form-group'>
    <?php echo form_label('Brand Banner'); ?>
    <?php 
    $banner = array('name' => 'banner', 'class' => 'form-control');
    echo form_upload($banner); 
    ?>
</div>

<!-- 提交按钮 -->
<div class="form-group">
    <?php echo form_submit('submit', 'Upload', ['class' => 'btn btn-primary']); ?>
</div>

<?php echo form_close(); ?>

第二步:完善Controller层的upload_brand方法

CodeIgniter的上传类可以分别处理每个独立的上传字段,因为你的两个字段name分别是brand_logo和banner,我们可以针对每个字段单独初始化上传配置并处理:

function upload_brand() {
    // 加载上传库
    $this->load->library('upload');

    // 通用上传配置(你可以根据需求调整)
    $upload_config = [
        'upload_path'   => './uploads/brand/', // 确保这个文件夹存在且有读写权限
        'allowed_types' => 'gif|jpg|png|jpeg',
        'max_size'      => 2048, // 2MB
        'file_name'     => uniqid() // 用唯一ID重命名文件,避免覆盖
    ];

    // 处理第一张图:Brand Logo
    $this->upload->initialize($upload_config);
    $logo_uploaded = $this->upload->do_upload('brand_logo');
    
    $logo_data = [];
    if ($logo_uploaded) {
        $logo_data = $this->upload->data(); // 获取上传成功后的文件信息
        $logo_path = $logo_data['full_path']; // 这就是你要的完整路径
        $logo_file_name = $logo_data['file_name']; // 文件名,存数据库常用这个
    } else {
        // 上传失败的错误提示
        $logo_error = $this->upload->display_errors();
        $this->session->set_flashdata('error', $logo_error);
    }

    // 处理第二张图:Brand Banner
    // 重新初始化配置(如果需要不同配置,可以在这里修改$upload_config)
    $this->upload->initialize($upload_config);
    $banner_uploaded = $this->upload->do_upload('banner');
    
    $banner_data = [];
    if ($banner_uploaded) {
        $banner_data = $this->upload->data();
        $banner_path = $banner_data['full_path']; // 第二张图的完整路径
        $banner_file_name = $banner_data['file_name'];
    } else {
        $banner_error = $this->upload->display_errors();
        $this->session->set_flashdata('error', $banner_error);
    }

    // 现在你可以把$logo_path和$banner_path存到数据库,或者做其他处理
    if ($logo_uploaded && $banner_uploaded) {
        $data = [
            'brand_logo' => $logo_file_name,
            'brand_banner' => $banner_file_name
        ];
        // 调用model插入数据库
        // $this->your_model->save_brand($data);
        $this->session->set_flashdata('success', '两张图片上传成功!');
        redirect('你的跳转页面');
    } else {
        redirect('上传表单页面');
    }
}

关键说明

  • 每次处理不同的上传字段时,要调用$this->upload->initialize($upload_config)重新初始化配置,避免之前的上传数据干扰。
  • $this->upload->data()方法会返回上传文件的所有信息,包括full_path(服务器完整路径)、file_name(文件名)、file_path(文件夹路径)等,你可以根据需求选择。
  • 确保./uploads/brand/文件夹存在,并且服务器有读写权限(可以设置权限为755或777)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:13