單個檔案影象上傳器

現在,我們將看到影象/檔案上傳程式碼如何在 CI 方式提出的表單的幫助下在本機 CI 方法中工作。

PHP 中的檔案上傳有兩種方案。下面提到如下。

  • 單個影象/檔案上傳器 - 可以藉助 form 屬性中的常規變數儲存。 (例如)<input type="file" name="image" />
  • 多影象/檔案上傳器 - 只能藉助檔案型別中名稱的陣列變數來儲存。 (例如)<input type="file" name="image[]" />

陣列變數即 name="profile[]" 也可以保持為 single image 上傳以及所述 multi-image 太。

因此,Native CodeIgnitor 格式的單個影象/檔案上傳器程式碼如下:

檢視部分:

<?php
echo form_open_multipart('employee/addemployee', array('name' => 'addemployee', 'class'=>'form-horizontal'));
?>
<div class="form-group">
   <label class="control-label col-sm-4" for="pwd">Profile:</label>
   <div class="col-sm-8">
      <input type="file" class="" id="profile" name="userimage">
   </div>
</div>
<div class="form-group">
   <div class="col-sm-offset-2 col-sm-10">
        <input type="submit" class="btn btn-primary pull-right" name="save" value="Save Employee" /> 
   </div>
</div>
<?php
echo form_close();
?>

因此,如果我們提交表格,它將進入

  • Employee - 控制器並搜尋名為 addemployee 的函式
  • 如果你需要檔案上傳器程式碼的必需屬性,則可以將名為 required 的 HTML5 屬性新增到輸入標記中。

下面是如何使用 required 屬性的兩個示例,但兩個方法也是相同的。

  1. 方法一:<input type="file" name="photo" required="required" />
  2. 方法二:<input type="file" name="photo" required />

因此,這些是影象/檔案上傳器的檢視部分中要遵循的一些重要提示。

控制器部分:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Employee extends CI_Controller {

    function __construct() {
    parent::__construct();
    $this->load->model('employee_model');
    $this->load->helper('url'); //This will load up all the URL parameters from the helper class
    $this->load->helper('form'); //This will load up all the form attributes that are need by the form.
    }

    public function addemployee()
    {
        if($_FILES["userimage"]['name']=='')            
        {
            // Here you can directly redirect to the form page itself with the Error Message
        }
        else
        {
            $new_name = time().$_FILES["userimage"]['name']; //This line will be generating random name for images that are uploaded       
            $config['upload_path'] = FCPATH ."assets/fileupload/";
            $config['allowed_types'] = 'gif|jpg|png';
            $config['file_name'] = $new_name;
            $this->load->library('upload', $config); //Loads the Uploader Library
            $this->upload->initialize($config);        
            if ( ! $this->upload->do_upload('userimage'))  {}
            else
            { 
            $data = $this->upload->data(); //This will upload the `image/file` using native image upload 
            }
            $data_value = array(
            'profile'=>$new_name,
            ); //Passing data to model as the array() parameter    
            $this->employee_model->saveemployee($data_value); //save_employee is the function name in the Model            
        }    
    }
?>

注意: 預設情況下,上傳例程要求檔案來自名為 userfile 的表單欄位,而 form 必須是 multipart 型別。

  • 因此它將使用 $data_value - 陣列轉到 employee_model,它將在名為 saveemployee 的函式下儲存資料。
  • 如果你想設定自己的欄位名稱,只需將其值傳遞給 do_upload() 方法即可
  • 使用 File Uploading 類,我們可以上傳檔案,我們也可以限制要上傳的檔案的型別和大小。
  • display_errors() - 如果 do_upload() 方法返回 false,則檢索任何錯誤訊息。該方法不會自動回顯,它會返回資料,以便你可以根據需要進行分配

符號:

這些是 CI 中可用的符號,我們可以在 index.php 中將其定義為短定義,我們可以在整個專案中使用它。

EXT: The PHP file extension
FCPATH: Path to the front controller (this file) (root of CI)
SELF: The name of THIS file (index.php)
BASEPATH: Path to the system folder
APPPATH: The path to the "application" folder

型號部分:

public function saveemployee($data_value)
{
    $this->db->insert('employee',$data_value);
}
  • 它將使用上傳的影象名稱儲存 employee 表中的資料。
  • 上傳的影象將儲存到我們在根資料夾或我們指定的任何其他資料夾中建立的目錄中。