在做一个网站的发布作业模块,想通过上传作业图片实现发布作业功能。现在把实现过程介绍一下,代码部分会有相应的注释以帮助理解,适合新手小白参考,希望大神阅后留下指导,莫笑~
创建上传表单页面
新建一个文件 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 都可以), 如果你的控制器中路径设置正确,你就可以成功上传文件了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。