FuelPHP 文件上传

fuelphp 文件上传

 

文件上传是表单编程中最常用的功能之一。 fuelphp 提供了一个特殊的类, 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 文件类型。例如,"文本/纯文本"
  • mime_blacklist-设置不允许的 mime 文件类型
  • prefix-将上传的文件保存到服务器时在文件名中添加前缀的字符串
  • suffix-将上传的文件保存到服务器时文件名后缀的字符串
  • extension-要设置的上传文件的扩展名
  • create_path-是否创建文件路径,如果不可用
  • overwrite-保存上传文件时是否覆盖现有文件
  • auto_rename-保存上传文件时是否通过添加序列号重命名文件
  • randomize-是否创建一个随机的 32 个字符的名称来保存上传的文件
  •  

    上传方法

    upload 类提供了处理和保存用户上传的文件的选项。每个处理过的文件(保存前)都会在结果数组中包含以下信息。

  • field-表单字段的名称
  • name-上传文件的名称
  • type-浏览器定义的文件类型
  • mimetype-上传类定义的文件类型
  • 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 将所有上传的文件作为多维数组返回。如果指定了表单文件输入的索引/名称,那么它将仅返回与指定文件输入相关的上传文件。

    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 并尝试上传文件。

     

    结果

    下一节:fuelphp ajax

    fuelphp 教程

    相关文章