如何在Codeigniter中使用自定义函数上传文件

时间:2017-05-17 04:30:41

标签: php codeigniter file-upload

我在使用框架之前创建了一个自定义函数,我现在想再次使用它。当我尝试使用自定义函数上传图像时出现问题。它说错误undefined index : [the field_name]

大多数人使用CI库和CI上传功能do_upload(),但我想使用自己的功能,因为它还会创建较小的图像以便用作拇指。

我3天前开始使用CI,但仍然不知道如何更改任何可以使$_FILES[]正常工作的内容。

观点:

  <form action="path/to/controller/method" method="post" enctype="multipart/form-data">
    <input type="file" name="fupload">

  </form>

控制器:

   public function __construct(){
    parent::__construct();
    $this->load->helper('fungsi_thumb'); // this is the custom function
    $config['allowed_types'] = '*';

    $this->load->library('upload',$config);
}

  public function input_file(){


     $data = array(
        'location_file' => $_FILES['fupload']['tmp_name'],
        'type_file' => $_FILES['fupload']['type'],
        'name_file' => $_FILES['fupload']['name']
       );

     $this->load->model('input_model');
     $this->input_model->put_file($data);
  }

我已将自定义函数文件放在application\helpers\中。我是否应该显示自定义函数文件和模型文件?

我已经更改了public $allowed_types = '*';

更新

模型

   public function put_file($data){
       //BUAT FILE
    $lokasi_file = $data['location_file'];
    $tipe_file = $data['type_file'];
    $nama_file = $data['name_file'];
    $acak = rand(1,99);
    $nama_file_unik = $acak.$nama_file;

    UploadImage($nama_file_unik); // this is my custom function

     $sql="INSERT INTO produk(gambar)VALUES (?)";
    $query=$this->db->query($sql,array($nama_file_unik));
    if($query)
    {
        echo "BERHASIL";
    }
    else
    {
        echo "GAGAL";
    }

   }

更新 我终于能够使用$_FILES,我需要在控制器构造函数中加载库

现在新问题是即使在我自己定制的函数中使用do_upload()函数也没有上传文件

这是我定制的功能

   function UploadImage($fupload_name){

// SET DATA FILE NYA
 $config['file_name'] = $fupload_name;
 $config['upload_path'] = 'http://localhost/mobileapp/assets/gambar/';

var_dump($config['upload_path']);

//load the upload library
$CI =& get_instance();
$CI->load->library('upload',$config);

//Upload the file
  if( !($CI->upload->do_upload('fupload'))){
     $error = $CI->upload->display_errors();
 }else{
     $file_data = $CI->upload->data();
 }
}

现在如上所示,我正在尝试使用file_name$config['file_name'] = $fupload_name;更改为新的随机生成的名称(在模型中完成)并创建一个新对象,因为显然我需要要执行此操作以加载库并使用do_upload()方法。

但我仍然无法使用它。现在我又被卡住了

2 个答案:

答案 0 :(得分:1)

$_FILES数组从控制器传递给模型函数,在配置数组中添加新文件名并直接使用do_upload()

控制器功能:

public function input_file(){
    $this->load->model('input_model');
    $this->input_model->put_file($_FILES); // pass $_FILES Array
}

模型功能:

public function put_file($files){
    $config['allowed_types'] = '*';
    $acak = rand(1,99);
    $config['file_name'] = $acak.$files['fupload']['name'];
    $this->load->library('upload',$config);
    $data = array(
       'location_file' => $files['fupload']['tmp_name'],
       'type_file' => $files['fupload']['type'],
       'name_file' => $files['fupload']['name']
    );
    if (!$this->upload->do_upload('fupload')) { // pass field name here
        $this->upload->display_errors('<p>', '</p>');
    } else {
       $sql="INSERT INTO produk(gambar)VALUES (?)";
       $query=$this->db->query($sql,array($nama_file_unik));
       if($query) {
          echo "BERHASIL";
       } else {
          echo "GAGAL";
       }
    }
}

答案 1 :(得分:1)

配置中的

upload_path 必须是绝对路径或相对路径,而不是网址。 所以你可以这样():

$config['upload_path'] = './uploads/';

或者这个:

$config['upload_path'] = FCPATH . 'uploads/';

注意:FCPATH是index.php文件夹的绝对路径。