FuelPHP - 文件上传
文件上传是表单编程中最常用的功能之一。FuelPHP 提供了一个特殊的类 Upload 来处理文件的上传。本章中,我们将学习如何使用 Upload 类上传文件。
配置
可以使用单独的配置文件 fuel/app/config/upload.php 配置 Upload 类。重要的配置条目如下 −
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 类提供处理和保存用户上传的文件的选项。每个处理过的文件(保存之前)在结果数组中都会有以下信息。
field − 表单字段的名称
name − 上传文件的名称
type − 浏览器定义的文件类型
mimetype − Upload 类定义的文件类型
file − 上传文件临时位置的完全限定名称
filename − 上传文件的文件名
extension −上传文件的扩展名
size − 上传文件的大小(以字节为单位)
errors − 包含错误代码和消息的错误数组
error − 是否设置数组错误以说明上传失败的原因(以防上传失败)
将文件保存在服务器中后,结果数组也将包含以下信息。
saved_to − 保存上传文件的完全限定路径
saved_as − 保存的文件的名称
errors −更新的错误数组
现在,让我们看看 Upload 类的方法。
is_valid
如果用户上传了任何有效文件,is_valid 将返回 true。
// 我们是否有任何已上传的文件需要保存? if (Upload::is_valid()) { // process }
get_files
get_files 将所有上传的文件作为多维数组返回。如果指定了表单文件输入的索引/名称,则它将仅返回与指定文件输入相关的上传文件。
foreach(Upload::get_files() as $file) { // 对文件信息进行一些处理 } if ( Upload::get_files(0)) { // do something }
get_errors
如果上传一个或多个文件失败,get_errors 将返回错误数组。如果指定了表单文件输入名称的索引/名称,则它将仅返回与指定文件输入相关的错误。
foreach(Upload::get_errors() as $file) { // 对文件信息进行一些处理 } 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 http://localhost:8080/upload/index 运行应用程序并尝试上传文件。