跟着阿大學CodeIgniter (二)—— 文件上傳

請輸入圖片描述
阿大說,爲作一張配圖,還要換系統,好苦13 ╮(╯-╰)╭php

原生php上傳

在使用CI以前,咱們來看看用原生代碼是如何上傳的,作個對比,就知道CI有多麼方便~html

首先建立一個視圖ci/application/views/uploader1.php數據庫

  • 表單的 action 填寫調用的控制器的上傳方法'upload1/up',這個將在下一步代碼中完成控制器具體內容
  • 填寫method,get或post
  • 當表單須要上傳時,應填寫'enctype="multipart/form-data"'segmentfault

    <form action="upload/up" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" name="sub" value="submit">
    </form>

而後寫控制器ci/application/controllers/upload1.php數組

  • move_uploaded_file() 是PHP的一個內置方法,把上傳好的文件從緩存處移到你想要的位置緩存

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Upload1 extends CI_Controller {
        function index()
        {
            $this -> load -> view('uploader1.php'); //調用視圖
        }
    
        function up() //這個就是視圖裏action調用的上傳接口
        {
            if (!empty($_POST['sub'])) { //當提交的時候
                // var_dump($_FILES['upfile']); 能夠打印看看上傳文件的信息
                $f = $_FILES['upfile']; //把文件信息賦給一個變量,方便調用
                if ($f['size'] > 102400) { //限制文件大小
                    echo "too large";
                } else {
                    if ($f['type'] == 'image/png') { //限制文件類型爲png
                        $t = time(); // 時間戳
                        $s = '.png';
                        move_uploaded_file($f['tmp_name'], move_uploaded_file($f['tmp_name'], './uploads/'.$t.$s);
                        //$f['tmp_name']是上傳好的文件從緩存文件,'/uploads/$t$s'是咱們要移動到的文件夾,在根目錄下本身建立的uploads文件夾。'./uploads/'.$t.$s 是變量的值進行字符串拼接,把文件以時間戳命名
                    }
                }
            }
        }
    }
    ?>

如今能夠訪問localhost/ci/index.php/upload進行上傳文件了app

CI文件上傳

CI有一個豐富的上傳類upload,它的源碼放在system/libraries/upload.php。咱們能夠輕鬆的調用它完成一系列操做。ide

  • 定義一個數組,存放設置
  • 引用CI 的 upload類,使用do_upload('上傳框的name')方法進行上傳。若上傳文件的input的name是userfile,則此方法不用帶參數。能夠看到upload類的源碼裏此處有個默認值就是userfile。
  • 接收成功或出錯信息。
    > 成功:$this -> upload -> data()
    > 錯誤:$this -> upload -> display_errors()

首先建立一個視圖ci/application/views/uploader2.phpcodeigniter

  • 注意此處 action 改成 'upload2/up',其餘不變post

    <form action="upload2/up" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" name="sub" value="submit">
    </form>

而後寫控制器ci/application/controllers/upload2.php

名稱 介紹
upload_path 文件上傳路徑。該路徑必須是可寫的,相對路徑和絕對路徑都可以。
allowed_types 容許上傳文件的MIME類型;一般文件擴展名能夠作爲MIME類型. 容許多個類型用豎線分開
file_name 想要使用的文件名,若是設置了這個參數,CodeIgniter 將根據這裏設置的文件名來對上傳的文件進行重命名。文件名中的擴展名也必須是容許的文件類型。
max_size 容許上傳文件大小的最大值(以K爲單位)。該參數爲0則不限制。注意:一般PHP也有這項限制,能夠在php.ini文件中指定。一般默認爲2MB。
max_width 上傳文件的寬度最大值(像素爲單位)。0爲不限制。
max_height 上傳文件的高度最大值(像素爲單位)。0爲不限制。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Upload2 extends CI_Controller {
    function index()
    {
        $this -> load -> view('uploader2.php');
    }

    function up()
    {
        // 把須要的配置放入config數組
        $config['upload_path'] = './uploads';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '102400';
        $this -> load -> library('upload', $config); //調用CI的upload類
        $this -> upload -> do_upload('upfile'); //使用do_upload('上傳框的name')方法進行上傳

        // 如下代碼爲拓展的,非必要
        if ($this -> upload -> do_upload('upfile')) { //上傳成功
            $data = array('upload_data' => $this -> upload -> data()); //將文件信息存入數組
            var_dump($data); //打印文件信息
        } else { //上傳失敗
            $error = array('error' => $this -> upload -> display_errors());//將錯誤信息存入數組
            var_dump($error); //打印錯誤信息
        }
    }
}
?>

如今能夠訪問localhost/ci/index.php/upload2進行上傳文件了

小結

CI的上傳類是咱們上傳更方便,代碼量少,而且很整潔

本系列文章

跟着阿大學CodeIgniter (一)——瞭解MVC
跟着阿大學CodeIgniter (二)—— 文件上傳
跟着阿大學CodeIgniter (三)—— 操做數據庫

相關文章
相關標籤/搜索