FuelPHP - загрузка файлов

Загрузка файлов - одна из наиболее часто используемых функций при программировании форм. FuelPHP предоставляет особый класс,Uploadдля обработки загрузки файлов. Давайте узнаем, как загрузить файл с помощью класса Upload в этой главе.

Конфигурация

Класс загрузки можно настроить с помощью отдельного файла конфигурации, fuel/app/config/upload.php. Важные записи конфигурации следующие:

  • max_size- Установите максимальный размер загружаемого файла. «0» означает неограниченный размер загрузки.

  • ext_whitelist - Установить разрешенные расширения файлов

  • ext_blacklist - Установить запрещенные расширения файлов

  • type_whitelist- Установить разрешенные типы файлов. Например, «текст» для пантомимы типа «текст / обычный».

  • type_blacklist - Установить запрещенные типы файлов

  • mime_whitelist- Установите разрешенные типы файлов MIME. Например, «текст / обычный»

  • mime_blacklist - Установить запрещенные типы файлов MIME

  • prefix - Строка для префикса в имени файла при сохранении загруженного файла на сервер

  • suffix - Строка для суффикса в имени файла при сохранении загруженного файла на сервер

  • extension - Установить расширение загружаемого файла

  • create_path - Следует ли создавать путь к файлу, если он недоступен

  • overwrite - Следует ли перезаписывать существующий файл при сохранении загруженного файла

  • auto_rename - Следует ли переименовывать файл, добавляя порядковый номер при сохранении загруженного файла

  • randomize - Следует ли создавать случайное 32-символьное имя для сохранения загруженного файла

Методы загрузки

Класс загрузки предоставляет параметры для обработки и сохранения файла, загруженного пользователями. Каждый обработанный файл (перед сохранением) будет иметь следующую информацию в массиве результатов.

  • field - Название поля формы

  • name - Имя загруженного файла

  • type - Тип файла, определенный браузером

  • mimetype - Тип файла, определенный классом загрузки

  • file - Полное имя временного расположения загруженного файла

  • filename - Имя загруженного файла

  • extension - Расширение загруженного файла

  • size - Размер загружаемого файла в байтах

  • errors - Массив ошибок с кодом ошибки и сообщением

  • error - Следует ли устанавливать ошибки массива с указанием причины сбоя загрузки (в случае сбоя загрузки)

После сохранения файлов на сервере результирующий массив также будет содержать следующую информацию.

  • saved_to - Полный путь, по которому был сохранен загруженный файл

  • saved_as - Имя файла, который был сохранен

  • errors - Обновлен массив ошибок

Теперь давайте посмотрим на метод класса Upload.

является действительным

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 
}

Процесс

Процесс относится к фактическому процессу сбора информации о загруженном файле. Мы можем предоставить новую настраиваемую конфигурацию, используя массив. Если конфигурация не указана, она будет использовать конфигурацию, определенную в 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 в примере нашего сотрудника, чтобы протестировать функциональность загрузки.

Step 1 - Создайте файл, fuel/app/classes/controller/upload.php. Создайте контроллер загрузки.

<?php 
   class Controller_Upload extends Controller { 
   }

Step 2 - Создайте новое действие get_upload.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Step 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>

Step 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 и попробуйте загрузить файл.

Результат