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