单个文件图像上传器

现在,我们将看到图像/文件上传代码如何在 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 表中的数据。
  • 上传的图像将保存到我们在根文件夹或我们指定的任何其他文件夹中创建的目录中。