Как загрузить изображение и файл в CodeIgniter (с примером)
Загрузка файла CodeIgniter
Управление файлами необходимо для большинства веб-приложений. Если вы разрабатываете систему управления контентом, вам потребуется возможность загружать изображения, текстовые документы, отчеты в формате PDF и т. д. Если вы работаете над сайтом для участников, вам может потребоваться предусмотреть возможность загрузки людьми своего профиля. изображений. Класс загрузки файлов CodeIgniter позволяет нам легко сделать все вышеперечисленное.
В этом уроке мы рассмотрим, как использовать библиотеку загрузки файлов для загрузки файлов.
Загрузка изображений в CodeIgniter
Загрузка файла в CodeIgniter имеет две основные части. Фронтенд и бэкенд. Интерфейс обрабатывается HTML-формой, которая использует файл типа ввода формы. На серверной стороне библиотека загрузки файлов обрабатывает введенные данные из формы и записывает их в каталог загрузки.
Начнем с формы ввода.
Создайте новый каталог с именем files в каталоге application/views.
Добавьте следующие файлы в папку application/views/files.
- upload_form.php – это представление содержит HTML-форму, которая имеет тип входного файла и отправляет выбранный файл на сервер для обработки.
- upload_result.php – в этом представлении отображаются результаты загруженного изображения, включая ссылку, по которой мы можем щелкнуть, чтобы просмотреть результаты.
Добавьте следующий код в upload_form.php
<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter Image Upload</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<h3>Select an image from your computer and upload it to the cloud</h3>
<?php
if (isset($error)){
echo $error;
}
?>
<form method="post" action="<?=base_url('store-image')?>" enctype="multipart/form-data">
<input type="file" id="profile_image" name="profile_image" size="33" />
<input type="submit" value="Upload Image" />
</form>
</div>
</body>
</html>
ВОТ,
- if (isset($error)){…} проверяет, установлена ли переменная ошибки. Если результат верен, пользователю отображается ошибка, возвращаемая библиотекой загрузки.
- Тип файла позволяет пользователю перейти на свой компьютер и выбрать файл для загрузки.
Добавьте следующий код в upload_result.php
<!DOCTYPE html>
<html>
<head>
<title>Image Upload Results</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<h3>Congratulations, the image has successfully been uploaded</h3>
<p>Click here to view the image you just uploaded
<?=anchor('images/'.$image_metadata['file_name'], 'View My Image!')?>
</p>
<p>
<?php echo anchor('upload-image', 'Go back to Image Upload'); ?>
</p>
</div>
</body>
</html>
ВОТ,
- использует помощник привязки для создания ссылки на новый загруженный файл в каталоге изображений. Имя извлекается из метаданных изображения, которые передаются в представление после успешной загрузки файла.
Давайте теперь создадим контроллер, который будет реагировать на загрузку нашего изображения.
Добавьте новый файл ImageUploadController.php в application/controllers.
Добавьте следующий код в ImageUploadController.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class ImageUploadController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
}
public function index() {
$this->load->view('files/upload_form');
}
public function store() {
$config['upload_path'] = './images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 2000;
$config['max_width'] = 1500;
$config['max_height'] = 1500;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('profile_image')) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('files/upload_form', $error);
} else {
$data = array('image_metadata' => $this->upload->data());
$this->load->view('files/upload_result', $data);
}
}
}
ВОТ,
- класс ImageUploadController расширяет CI_Controller {…} определяет наш класс контроллера и расширяет базовый контроллер CI_Controller
- публичная функция __construct() {…} инициализирует метод родительского конструктора и загружает URL-адрес и помощники формы
- публичная функция index() {…} определяет метод индекса, который используется для отображения формы загрузки изображения
- public function store() {…} определяет метод, который будет загружать изображение и сохранять его на сервере веб-приложений.
- $config['upload_path'] = './images/'; устанавливает каталог, в который должны быть загружены изображения
- $config['allowed_types'] = 'gif|jpg|png'; определяет допустимые расширения файлов. Это важно из соображений безопасности. Разрешенные типы гарантируют, что загружаются только изображения, а другие типы файлов, такие как php, не могут быть загружены, поскольку они могут поставить под угрозу сервер.
- $config['max_size'] = 2000; установите максимальный размер файла в килобайтах. В нашем примере максимальный размер файла, который можно загрузить, составляет 2,000 КБ (около 2 МБ). Если пользователь попытается загрузить файл размером более 2,000 КБ, изображение не загрузится, и библиотека вернет сообщение об ошибке.
- $config['max_width'] = 1500; устанавливает максимальную ширину изображения, которая в нашем случае составляет 1,500 пикселей. Любая ширина, превышающая эту, приводит к ошибке.
- $config['max_height'] = 1500; определяет максимально допустимую высоту.
- $this->load->library('upload', $config); загружает библиотеку загрузки и инициализирует ее с помощью массива $config, который мы определили выше.
- if (!$this->upload->do_upload('profile_image')) {…} пытается загрузить отправленное изображение, которое в нашем случае называется Profile_image
- $error = array('error' => $this->upload->display_errors()); устанавливает сообщение об ошибке, если загрузка не удалась
- $this->load->view('files/upload_form', $error); загружает форму загрузки файла и отображает сообщение об ошибке, возвращаемое из библиотеки загрузки
- $data = array('image_metadata' => $this->upload->data()); устанавливает метаданные изображения, если загрузка прошла успешно
- $this->load->view('files/upload_result', $data); загружает представление успешно загруженного файла и передает метаданные загруженного файла.
Вот и все, что касается контроллера. Давайте теперь создадим каталог, в который будут загружены наши изображения. Создайте новый каталог images в корневом каталоге вашего приложения.
Наконец, мы добавим два маршрута в наш файл Routes.php, которые будут отображать форму и результаты.
Open application/config/routes.php Add the following routes $route['upload-image'] = 'imageuploadcontroller'; $route['store-image'] = 'imageuploadcontroller/store';
ВОТ,
- $route['upload-image'] = 'imageuploadcontroller'; определяет URL-адрес загрузки изображения, который вызывает индексный метод ImageUploadController
- $route['store-image'] = 'imageuploadcontroller/store'; определяет URL-адрес хранилища-изображения, которое принимает выбранный пользовательский файл и загружает его на сервер.
Тестирование приложения
Запустим встроенный PHP-сервер
Откройте терминал/командную строку и перейдите в корень вашего приложения. В моем случае корень находится на диске C:\Sites\ci-app.
cd C:\Sites\ci-app
запустите сервер, используя следующую команду
php -S localhost:3000
Загрузите следующий URL-адрес в свой веб-браузер: http://localhost:3000/upload-image
вы сможете увидеть следующие результаты
Нажмите выбрать файл
Вы должны увидеть диалоговое окно, подобное следующему.
Выберите желаемое изображение и нажмите «Открыть».
Выбранное имя файла отобразится в форме загрузки, как показано на изображении выше. Нажмите кнопку загрузить изображение
Вы получите следующие результаты, если все пойдет хорошо
Нажмите «Просмотреть мое изображение!» Связь
Вы должны увидеть изображение, которое вы загрузили. Результаты будут аналогичны следующим
Обратите внимание, что имя загруженного изображения отображается в URL-адресе. Мы получили имя изображения из метаданных загруженного изображения.
Примечание. Процесс загрузки файлов остается таким же для других типов файлов.





