使用CI框架实现 单文件上传 和 多文件上传 的方法
单文件上传
创建上传表单
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div id="container">
<form action="index.php/welcome/up" method="post" enctype="multipart/form-data">
<input type="text" name="text" />
<input type="file" name="upfile" />
<input type="submit" name="sub" value="提交" />
</form>
</div>
</body>
</html>
控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
//显示上传信息
public function up(){
$text = $this->input->post('text');
var_dump($text);
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = "2000";
$this->load->library('upload',$config);
//打印成功或错误的信息
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);
}
}
}
注意:$data是你上传文件的所有相关信息的数组
1、首先在form表单加上enctype="multipart/form-data"说明该表单用来上传文件
2、特别注意的是,:默认情况下上传的文件来自于提交表单里名为userfile的文件域
3、$this->upload->data()这是一个辅助函数,它返回你上传文件的所有相关信息的数组
多文件上传
前端
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div id="container">
<form action="index.php/welcome/up" method="post" enctype="multipart/form-data">
<input type="file" name="upfile1" />
<input type="file" name="upfile2" />
<input type="submit" name="sub" value="提交" />
</form>
</div>
</body>
</html>
控制器
public function up(){
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = "2000";
$this->load->library('upload',$config);
//循环处理上传文件
foreach ($_FILES as $key => $value) {
if (!empty($key['name'])) {
if ($this->upload->do_upload($key)) {
//上传成功
array_push($mulfile, $this->upload->data());
} else {
//上传失败
echo $this->upload->display_errors();
}
}
}
echo json_encode(array(
'code' => -1,
'message' => $mulfile
));
return;
}
或者通过相应的name属性来对指定上传的文件进行操作
if ( ! $this->upload->do_upload('upfile1')) {
$error = array('error' => $this->upload->display_errors());
echo json_encode(array(
'code' => -1,
'message' => "upfile1上传失败: $error"
));
return;
}
if ( ! $this->upload->do_upload('upfile2')) {
$error = array('error' => $this->upload->display_errors());
echo json_encode(array(
'code' => -1,
'message' => "upfile2上传失败: $error"
));
return;
}
设置参数
默认值 | 选项 | 描述 | |
---|---|---|---|
upload_path | None | None | 文件上传的位置,必须是可写的,可以是相对路径或绝对路径 |
allowed_types | None | None | 允许上的文件 MIME 类型,通常文件的后缀名可作为 MIME 类型可以是数组,也可以是以管道符(|)分割的字符串 |
file_name | None | Desired file name | 如果设置了,CodeIgniter 将会使用该参数重命名上传的文件设置的文件名后缀必须也要是允许的文件类型如果没有设置后缀,将使用原文件的后缀名 |
file_ext_tolower | FALSE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,文件后缀名将转换为小写 |
overwrite | FALSE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,上传的文件如果和已有的文件同名,将会覆盖已存在文件如果设置为 FALSE ,将会在文件名后加上一个数字 |
max_size | 0 | None | 允许上传文件大小的最大值(单位 KB),设置为 0 表示无限制注意:大多数 PHP 会有它们自己的限制值,定义在 php.ini 文件中通常是默认的 2 MB (2048 KB)。 |
max_width | 0 | None | 图片的最大宽度(单位为像素),设置为 0 表示无限制 |
max_height | 0 | None | 图片的最大高度(单位为像素),设置为 0 表示无限制 |
min_width | 0 | None | 图片的最小宽度(单位为像素),设置为 0 表示无限制 |
min_height | 0 | None | 图片的最小高度(单位为像素),设置为 0 表示无限制 |
max_filename | 0 | None | 文件名的最大长度,设置为 0 表示无限制 |
max_filename_increment | 100 | None | 当 overwrite 参数设置为 FALSE 时,将会在同名文件的后面加上一个自增的数字这个参数用于设置这个数字的最大值 |
encrypt_name | FALSE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,文件名将会转换为一个随机的字符串如果你不希望上传文件的人知道保存后的文件名,这个参数会很有用 |
remove_spaces | TRUE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,文件名中的所有空格将转换为下划线,推荐这样做 |
detect_mime | TRUE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,将会在服务端对文件类型进行检测,可以预防代码注入攻击除非不得已,请不要禁用该选项,这将导致安全风险 |
mod_mime_fix | TRUE | TRUE/FALSE (boolean) | 如果设置为 TRUE ,那么带有多个后缀名的文件将会添加一个下划线后缀这样可以避免触发 Apache mod_mime 。如果你的上传目录是公开的,请不要关闭该选项,这将导致安全风险 |