fuelphp 文件上传
文件上传是表单编程中最常用的功能之一。 fuelphp 提供了一个特殊的类, upload 来处理文件的上传。本章让我们学习如何使用 upload 类上传文件。
配置
上传类可以使用单独的配置文件 fuel/app/config/upload.php 进行配置。重要的配置条目如下:
上传方法
upload 类提供了处理和保存用户上传的文件的选项。每个处理过的文件(保存前)都会在结果数组中包含以下信息。
一旦文件保存在服务器中,结果数组也会有以下信息。
现在,让我们看看 upload 类的方法。
is_valid
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
get_errors 返回一个错误数组,如果上传一个或多个文件失败。如果指定了表单文件输入名称的索引/名称,那么它将仅返回与指定文件输入相关的错误。
foreach(upload::get_errors() as $file) { // do something with the file info } if (upload::get_errors('myimage')) { // do something }
过程
process 是指收集有关上传文件的信息的实际过程。我们可以使用数组提供新的自定义配置。如果没有指定配置,则使用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 来测试上传功能。
步骤 1-创建一个文件, fuel/app/classes/controller/upload.php。创建上传控制器。
class controller_upload extends controller { }
第 2 步-创建一个新操作 get_upload。
class controller_upload extends controller { public function get_index() { return \view::forge("upload/index"); } }
第 3 步-为创建的操作创建一个新视图。
<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>
第 4 步-创建一个新的操作 post_action 来处理上传的文件。
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 并尝试上传文件。