4

在做一个网站的发布作业模块,想通过上传作业图片实现发布作业功能。现在把实现过程介绍一下,代码部分会有相应的注释以帮助理解,适合新手小白参考,希望大神阅后留下指导,莫笑~


创建上传表单页面

新建一个文件 upload_form.php ,放入如下代码,并保存到 application/views/ 目录下:

<html>
<head>
    <title>Upload Form</title>
</head>
<body>
    <!-- 这是手册中给出的,可是我没有用所以注释掉了 -->
    <!-- <?php echo $error;?> -->
    <!-- 创建 form 的起始标签,文件上传需要使用multipart表单,控制器中的辅助函数可以帮你正确生成它 -->
    <?php echo form_open_multipart('upload/do_upload');?>
    <!-- 一个文本输入框,do_upload方法默认上传文件的表单名为userfile,所以这里的name属性值要与其相对应 -->
    <input type="file" name="userfile" size="20" />
    <!-- 符合XHTML规范,孤立标签都需要自行封闭。在这里可用可不用 -->
    <br /><br />
    <!-- 这是一个提交按钮 -->
    <input type="submit" value="upload" />
    <!-- form 结束标签,对应前面的起始标签 -->
    </form> 
</body>
</html>

创建上传成功页面

新建一个文件 upload_success.php ,放入如下代码,并保存到 application/views/ 目录下:

<html>
<head>
    <title>Upload Form</title>
</head>
<body>
    <!-- 提示上传成功的标题文字 -->
    <h3>Your file was successfully uploaded!</h3>
    
    <ul>
    <!-- 循环语句每次循环中,当前单元$upload_data的值被赋给 $value 并且数组内部的指针向前移一步,除了当前单元的值以外,键值也会在每次循环中被赋给变量$item  -->
    <?php foreach ($upload_data as $item => $value):?>
    <!-- 以列表的形式输出$item的值和$value的值 -->
    <li><?php echo $item;?>: <?php echo $value;?></li>
    <!-- 循环结束的标志 -->
    <?php endforeach; ?>
    </ul>
    
    <!-- 其中的'upload'位置填写相应Controller/method的URL,anchor()是创建链接的函数,Upload Another File!是链接的名称 -->
    <p><?php echo anchor('upload', 'Upload Another File!'); ?></p>
    
</body>
</html>

编写上传文件控制器

新建一个控制器 Upload.php ,放入如下代码,并保存到 application/controllers/ 目录下:

<?php

class Upload extends CI_Controller {

    public function __construct()
    {
        parent::__construct();//调用父类中的构造函数
        $this->load->helper(array('form', 'url'));//加载辅助函数,帮助生成上传页面的form的起始标签
    }

    public function index()
    {
        $this->load->view('upload_form');//加载文件上传页面
    }

    public function do_upload()//执行上传的关键函数
    {
        $config['upload_path']      = './uploads/';//文件即将上传到的目录路径,注意这里经常出错
        $config['allowed_types']    = 'gif|jpg|png';//允许上的文件 MIME 类型
        $config['max_size']     = 100;//允许上传文件大小的最大值(单位 KB),设置为 0 表示无限制
        $config['max_width']        = 1024;//图片的最大宽度(单位为像素),设置为 0 表示无限制
        $config['max_height']       = 768;//图片的最小高度(单位为像素),设置为 0 表示无限制

        $this->load->library('upload', $config);//初始化文件上传类,其中$this->load->library('类名');

        if ( ! $this->upload->do_upload('userfile'))//如果不满足条件
        {
            $error = array('error' => $this->upload->display_errors());//获取错误信息
            print_r($error);//打印错误信息
            //$this->load->view('upload_form', $error);手册中给出的,未使用
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());//把上传文件的相关数据赋给$data变量 
            
            $this->load->view('upload_success', $data);//加载上传成功页面,将上传文件的相关数据一并加载
        }
    }
}
?>

创建上传文件的目录

在 CodeIgniter 的安装根目录下创建一个 uploads 目录,用来保存上传的图片。

运行

使用类似于下面的 URL 来方法你的站点:

example.com/index.php/upload/

或者

http://localhost/index.php/项目名/控制器名

通过以上操作,你将看到一个上传文件的表单,尝试着上传一个图片文件(jpg、gif 或 png 都可以), 如果你的控制器中路径设置正确,你就可以成功上传文件了。


Fluentcc
55 声望1 粉丝