📜  CodeIgniter-文件上传(1)

📅  最后修改于: 2023-12-03 14:40:08.545000             🧑  作者: Mango

CodeIgniter-文件上传

简介

CodeIgniter是一个开源的PHP框架,旨在为开发人员提供一个简单且优雅的方式来编写Web应用程序。其中,文件上传是使用CodeIgniter开发Web应用程序时常用的功能之一。

CodeIgniter提供了方便的文件上传库,可以帮助开发人员轻松地实现文件上传功能。本文将介绍CodeIgniter中的文件上传功能,并提供示例代码。

文件上传流程

CodeIgniter中的文件上传流程可以归纳为以下几个步骤:

  1. 配置文件上传参数。
  2. 创建上传表单。
  3. 处理上传文件。
  4. 验证上传文件信息。
  5. 处理上传文件并储存到服务器。
配置文件上传参数

在使用CodeIgniter实现文件上传功能前,需要配置一些文件上传参数。相关参数可以在CodeIgniter的配置文件config.php中进行设置。以下是常用的参数及其默认值:

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
  • upload_path:设置上传文件存储的目录,默认设置为当前项目的uploads目录。
  • allowed_types:设置允许上传的文件类型,默认设置为gif、jpg、png。
  • max_size:设置允许上传的文件最大尺寸(以KB为单位),默认为100KB。
  • max_width:设置允许上传的图片的最大宽度(以像素为单位),默认为1024像素。
  • max_height:设置允许上传的图片的最大高度(以像素为单位),默认为768像素。

需要注意的是,这里是用PHP语言对CodeIgniter的参数进行设置,因此需要在config.php文件中加上open_tag和close_tag:

$config['open_tag'] = '<?php ';
$config['close_tag'] = ' ?>';
创建上传表单

当配置好文件上传参数后,就可以创建包含文件上传功能的表单了。创建上传表单的代码如下:

<!-- 文件上传表单 -->
<form action="/upload/do_upload" method="post" enctype="multipart/form-data">
  <input type="file" name="userfile" size="20" />
  <br /><br />
  <input type="submit" value="上传" />
</form>

其中,表单的enctype必须设置为multipart/form-data,以便支持文件上传。通过input标签设置type属性为file来创建文件上传控件。

处理上传文件

上传文件的处理分为两个阶段,首先需要验证上传文件信息,确保上传的文件符合要求;其次需要把上传的文件保存到服务器的指定目录中。

验证上传文件信息

CodeIgniter提供了CI_Form_validation类,可以方便地验证表单输入是否符合要求。以下是一个验证上传文件的示例代码:

public function do_upload() {
  // 加载上传库
  $this->load->library('upload');
  
  // 配置上传参数
  $config['upload_path'] = './uploads/';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 100;
  $config['max_width'] = 1024;
  $config['max_height'] = 768;
  
  $this->upload->initialize($config);
  
  // 如果上传失败则输出错误信息
  if (!$this->upload->do_upload('userfile')) {
    $error = array('error' => $this->upload->display_errors());
    echo $error;
  } else {
    // 上传成功
    // 获取上传的文件信息
    $data = array('upload_data' => $this->upload->data());
    // 加载视图
    $this->load->view('upload_success', $data);
  }
}
处理上传文件并保存

当上传文件信息验证通过后,就需要把上传的文件保存到服务器指定的目录中。CodeIgniter提供了upload类来完成这个任务,代码如下:

public function do_upload() {
  // 加载上传库
  $this->load->library('upload');
  
  // 配置上传参数
  $config['upload_path'] = './uploads/';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 100;
  $config['max_width'] = 1024;
  $config['max_height'] = 768;
  
  $this->upload->initialize($config);
  
  // 如果上传失败则输出错误信息
  if (!$this->upload->do_upload('userfile')) {
    $error = array('error' => $this->upload->display_errors());
    echo $error;
  } else {
    // 上传成功
    // 获取上传的文件信息
    $data = array('upload_data' => $this->upload->data());
    // 加载视图
    $this->load->view('upload_success', $data);
    // 将上传的文件保存到服务器目录
    $file_path = './uploads/' . $data['upload_data']['file_name'];
    file_put_contents($file_path, file_get_contents($data['upload_data']['full_path']));
  }
}

以上代码中,使用file_put_contents()和file_get_contents()函数来实现文件的保存。

结语

本文介绍了如何使用CodeIgniter实现文件上传功能。通过配置上传参数、创建上传表单以及处理上传文件,开发人员可以轻松地为Web应用添加文件上传功能。