文件上传是表单编程中最常用的功能之一. FuelPHP提供了一个特殊类,上传来处理文件上传.让我们在本章中学习如何使用Upload类上传文件.
可以使用单独的配置文件
max_size : 设置要上载的文件的最大大小. "0"表示无限上传大小
ext_whitelist : 设置允许的文件扩展名
ext_blacklist : 设置不允许的文件扩展名
type_whitelist : 设置允许的文件类型.例如,mime类型"text/plain"的"text"
type_blacklist : 设置不允许的文件类型
mime_whitelist : 设置允许的mime文件类型.例如,"text/plain"
mime_blacklist : 设置不允许的mime文件类型
前缀 : 将上传的文件保存到服务器时将文件名作为前缀的字符串
后缀 : 将上传的文件保存到服务器时文件名中的后缀字符串
扩展名 : 要设置的上传文件的扩展名
create_path : 是否创建文件路径(如果不可用)
覆盖 : 是否在保存上传文件时覆盖现有文件
auto_rename : 是否通过在保存上传文件时添加序列号来重命名文件
randomize : 是否创建随机32个字符的名称以保存上传的文件
上传类提供了处理和保存用户上传的文件的选项.每个已处理的文件(保存之前)将在结果数组中包含以下信息.
字段 : 表单字段的名称
名称 : 上传文件的名称
type : 浏览器定义的文件类型
mimetype : 上传类定义的文件类型
文件 : 上传文件临时位置的完全限定名称
文件名 : 上传文件的文件名
扩展名 : 上传文件的扩展名
尺寸 : 以字节为单位上传文件的大小
错误 : 有错误代码和消息的错误数组
错误 : 是否设置数组错误以及上传失败的原因(如果上传失败)
文件保存在服务器中后,结果数组也将包含以下信息.
saved_to : 保存上传文件的完全限定路径
saved_as : 已保存文件的名称
错误 : 更新的错误数组
现在,让我们看一下上传类的方法.
如果用户上传了任何有效文件,则is_valid返回true.
// do we have any uploaded files to save? if (Upload::is_valid()) { // process }
get_files将所有上传的文件作为多维数组返回.如果指定了表单文件输入的索引/名称,则它将仅返回与指定文件输入相关的上载文件.
foreach(Upload::get_files() as $file) { // do something with the file info } if ( Upload::get_files(0)) { // do something }
如果失败,get_errors会返回错误数组上传一个或多个文件.如果指定了表单文件输入名称的索引/名称,则它将仅返回与指定文件输入相关的错误.
foreach(Upload::get_errors() as $file) { // do something with the file info } if (Upload::get_errors('myimage')) { // do something }
过程是指收集有关信息的实际过程上传的文件.我们可以使用数组提供新的自定义配置.如果没有指定配置,那么它将使用在fuel/app/config/upload.php中定义的配置
Upload::process (array( 'auto_rename' => false, 'overwrite' => true ));
save是指将所有经过验证的文件保存在适当位置的实际过程.我们可以指定索引来仅保存该特定条目.
Upload::save(); Upload::save(0); Upload::save(0, 3);
让我们在员工示例中创建一个新控制器Controller_Upload来测试上传功能./p>
第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); } } } }
最后,通过请求网址