求助:在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
相关产品推荐
相关产品推荐

