Codeigniter:如何获得文件的文件名


Codeigniter: how to get a filename of a file

我是一个Codeigniter新手,我正试图获得上传图像的文件名,以便我可以将其保存在数据库中。我有两个模型,hommodel处理我的数据库和image_upload_model处理图像上传。一切都很好,除了我不知道如何将图像文件名发布到数据库

image_upload_model.php

<?php
class Image_upload_model extends CI_Model {
    var $image_path;
    //constructor containing the image path
    function Image_upload_model() {
        $this->image_path = realpath(APPPATH.'../assets/img');
    }
    //uploading the file
    function do_upload() {
        $config = array(
            'allowed_types' => 'jpg|jpeg|gif|png',
            'upload_path' => $this->image_path
        );
        $this->load->library('upload',$config);
        $this->upload->do_upload();
    }
}
?>

homemodel.php

<?php
class homeModel extends CI_Model {
    //inserting into the table tenants
    function addTenants() {
        $this->load->model('Image_upload_model');
        $data = array(
            'Fname' => $this->input->post('Fname'),
            'Lname' => $this->input->post('Lname'),
            'contact' => $this->input->post('contact'),
            'email' => $this->input->post('email'),
            'location' => $this->input->post('location'),
            'img_url' => " "//the filename of the image should go here
        );
        $this->db->insert('tenants', $data);
    }
}
?>

控制器
homecontroller.php

<?php
class HomeController extends CI_Controller {
    public function index() {
        $this->load->helper('form');
        $this->load->helper('html');
        $this->load->model('homemodel');
        $this->load->model('Image_upload_model');
        if ($this->input->post('submit') == 'Submit') {
            $this->homemodel->addTenants();
            echo 'inserted';
            $this->Image_upload_model->do_upload();
            echo 'image uploaded';
        }
        $this->load->view('index.php');
    }
}
?>

任何帮助都是感激的,谢谢!

你可以得到这样的文件名

  $upload_data = $this->upload->data(); 
  $file_name =   $upload_data['file_name'];

在非常高的层次上,您需要按照如下方式重构代码:

(1)在您的HomeController中,首先上传图像($this->Image_upload_model->do_upload()),然后更新数据库($this->homemodel->addTenants())

(2)在您的上传模型中,您需要调用$this->upload->data()来获取包含文件名的信息数组(请参阅CodeIgniter文档)。然后,您必须获得该文件名,并使其对home控制器可用,并将其传递给addTenants函数。

有了这个指导,您应该能够相应地修改您的代码。

使用$this->upload->file_name轻松获取文件名

基于system/library/upload.php的功能上传

public $file_name               = "";
public function data()
{
    return array (
                    'file_name'         => $this->file_name,
                    'file_type'         => $this->file_type,
                    ...
                );
}