- FuelPHP 教程
- FuelPHP - 首页
- FuelPHP - 简介
- FuelPHP - 安装
- FuelPHP - 架构概述
- FuelPHP - 简单 Web 应用程序
- FuelPHP - 配置
- FuelPHP - 控制器
- FuelPHP - 路由
- FuelPHP - 请求 & 响应
- FuelPHP - 视图
- FuelPHP - 展示器
- FuelPHP - 模型 & 数据库
- FuelPHP - 表单编程
- FuelPHP - 验证
- 高级表单编程
- FuelPHP - 文件上传
- FuelPHP - Ajax
- FuelPHP - HMVC 请求
- FuelPHP - 主题
- FuelPHP - 模块
- FuelPHP - 包
- Cookie & 会话管理
- FuelPHP - 事件
- FuelPHP - 邮件管理
- FuelPHP - 性能分析器
- 错误处理 & 调试
- FuelPHP - 单元测试
- 完整工作示例
- FuelPHP 有用资源
- FuelPHP - 快速指南
- FuelPHP - 有用资源
- FuelPHP - 讨论
FuelPHP - 文件上传
文件上传是表单编程中最常用的功能之一。FuelPHP 提供了一个特殊的类 **Upload** 来处理文件上传。在本节中,我们将学习如何使用 Upload 类上传文件。
配置
Upload 类可以通过单独的配置文件 **fuel/app/config/upload.php** 进行配置。重要的配置项如下:
**max_size** - 设置要上传文件的最大大小。“0” 表示无限上传大小
**ext_whitelist** - 设置允许的文件扩展名
**ext_blacklist** - 设置不允许的文件扩展名
**type_whitelist** - 设置允许的文件类型。例如,对于 mime 类型“text/plain”,设置为“text”
**type_blacklist** - 设置不允许的文件类型
**mime_whitelist** - 设置允许的 mime 文件类型。例如,“text/plain”
**mime_blacklist** - 设置不允许的 mime 文件类型
**prefix** - 在将上传的文件保存到服务器时,要添加到文件名之前的字符串
**suffix** - 在将上传的文件保存到服务器时,要添加到文件名之后的字符串
**extension** - 要设置的上传文件的扩展名
**create_path** - 是否创建文件路径,如果不存在
**overwrite** - 是否在保存上传的文件时覆盖现有文件
**auto_rename** - 是否通过添加序列号来重命名文件,以便保存上传的文件
**randomize** - 是否创建随机的 32 字符名称以保存上传的文件
Upload 方法
Upload 类提供用于处理和保存用户上传文件的选项。每个处理后的文件(在保存之前)都将在结果数组中包含以下信息。
**field** - 表单字段的名称
**name** - 上传的文件名
**type** - 浏览器定义的文件类型
**mimetype** - Upload 类定义的文件类型
**file** - 上传文件的临时位置的完全限定名称
**filename** - 上传的文件名
**extension** - 上传文件的扩展名
**size** - 上传文件的以字节为单位的大小
**errors** - 包含错误代码和消息的错误数组
**error** - 是否设置包含上传失败原因的错误数组(如果上传失败)
一旦文件保存在服务器上,结果数组也将包含以下信息。
**saved_to** - 上传文件保存到的完全限定路径
**saved_as** - 保存的文件名
**errors** - 更新后的错误数组
现在,让我们看看 Upload 类的使用方法。
is_valid
如果用户上传了任何有效文件,则 is_valid 返回 true。
// do we have any uploaded files to save?
if (Upload::is_valid()) {
// process
}
get_files
get_files 返回所有上传的文件作为多维数组。如果指定了表单文件输入的索引/名称,则它将仅返回与指定文件输入相关的上传文件。
foreach(Upload::get_files() as $file) {
// do something with the file info
}
if ( Upload::get_files(0)) {
// do something
}
get_errors
如果上传一个或多个文件失败,则 get_errors 返回一个错误数组。如果指定了表单文件输入名称的索引/名称,则它将仅返回与指定文件输入相关的错误。
foreach(Upload::get_errors() as $file) {
// do something with the file info
}
if (Upload::get_errors('myimage')) {
// do something
}
Process
process 指的是收集有关上传文件的信息的实际过程。我们可以使用数组提供新的自定义配置。如果未指定配置,则它将使用 fuel/app/config/upload.php 中定义的配置。
Upload::process (array( 'auto_rename' => false, 'overwrite' => true ));
save
save 指的是将所有已验证的文件保存到正确位置的实际过程。我们可以指定索引以仅保存该特定条目。
Upload::save(); Upload::save(0); Upload::save(0, 3);
工作示例
让我们在我们的员工示例中创建一个新的控制器 Controller_Upload 来测试上传功能。
**步骤 1** - 创建一个文件 **fuel/app/classes/controller/upload.php**。创建上传控制器。
<?php
class Controller_Upload extends Controller {
}
**步骤 2** - 创建一个新的动作 get_upload。
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
}
**步骤 3** - 为创建的动作创建一个新的视图。
<!DOCTYPE html>
<html>
<body>
<form action = "/upload/index" method = "post" enctype = "multipart/form-data">
Select image to upload:
<input type = "file" name = "fileToUpload" id = "fileToUpload">
<input type = "submit" value = "Upload Image" name = "submit">
</form>
</body>
</html>
**步骤 4** - 创建一个新的动作 post_action 来处理上传的文件。
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
public function post_index(){
$config = array(
'path' => DOCROOT.'files',
'randomize' => true,
'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
);
Upload::process($config);
// if there are any valid files
if (Upload::is_valid()) {
Upload::save();
echo "success";
} else {
// and process any errors
foreach (Upload::get_errors() as $file) {
echo var_dump($file);
}
}
}
}
最后,通过请求 URL **https://:8080/upload/index** 运行应用程序,并尝试上传文件。
结果