Як завантажити зображення та файл у CodeЗапальник (з прикладом)

⚡ Розумний підсумок

CodeIgniter File Upload використовує вбудовану бібліотеку Upload для переміщення зображень та документів з HTML-форми до каталогу сервера. У цьому прикладі створюється форма завантаження, контролер, який перевіряє тип та розмір, і сторінка результатів, що підтверджує завантаження.

  • 📁 Основний клас: Бібліотека завантаження виконує роботу серверної частини з перевірки надісланого файлу та його запису до вибраного каталогу завантаження.
  • 🖼️ Дві частини: Для завантаження потрібна HTML-форма фронтенду з файлом типу вхідних даних, а також контролер сервера, який обробляє надсилання.
  • 🔒 Білий список типів: Конфігурація allowed_types приймає лише перелічені розширення, такі як gif, jpg та png, блокуючи небезпечні файли, такі як PHP-скрипти.
  • 📏 Обмеження розміру: Ключі max_size, max_width та max_height відхиляють файли, що перевищують обмеження, та повертають чітке повідомлення про помилку.
  • ???? Кодування форми: У формі потрібно встановити enctype значення multipart/form-data, інакше вибраний файл ніколи не надійде на сервер.
  • 📄 Метадані результату: У разі успіху, upload->data() повертає деталі файлу, що використовуються для створення посилання на щойно збережене зображення.
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть генерувати форму завантаження, правила перевірки контролера та обробку помилок, а потім перевіряти їх на наявність прогалин у безпеці.

CodeЗавантаження файлу запалювача

CodeЗавантаження файлу запалювача

Керування файлами є важливим для більшості веб-застосунків. Якщо ви розробникping система керування контентом, тоді вам потрібно буде мати можливість завантажувати зображення, документи Word, звіти PDF тощо. Якщо ви працюєте над сайтом членства, вам може знадобитися передбачити можливість для людей завантажувати зображення своїх профілів. CodeКлас завантаження файлів Igniter дозволяє нам легко виконувати все вищезазначене.

У цьому посібнику ми розглянемо, як використовувати бібліотеку для завантаження файлів.

Завантаження зображень у CodeЗапалювач

Завантаження файлу в CodeЗапалювач має дві основні частини: фронтенд та серверну частину. Фронтенд обробляється HTML-формою, яка використовує файл типу вхідних даних форми. На серверній частині бібліотека завантаження файлів обробляє надіслані вхідні дані з форми та записує їх у каталог завантаження.

Почнемо з форми введення.

Створіть новий каталог з назвою files у каталозі application/views.

Додайте наступні файли в додаток/перегляди/файли

  • 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(0)?>" 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)){…} перевіряє, чи встановлено змінну 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>

ТУТ,

  • використовує допоміжний метод anchor для створення посилання на щойно завантажений файл у каталозі зображень. Назва отримується з метаданих зображення, які передаються до представлення після успішного завантаження файлу.

Давайте тепер створимо контролер, який реагуватиме на завантаження нашого зображення.

Додайте новий файл ImageUploadController.php у додаток/контролери

Додайте наступний код до 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);
}
}
 
}

ТУТ,

  • class ImageUploadController extends CI_Controller {…} визначає наш клас контролера та розширює базовий контролер CI_Controller
  • публічна функція __construct() {…} ініціалізує метод батьківського конструктора та завантажує URL-адресу та помічники форми
  • public function 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, який ми визначили вище.
    • якщо (!$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, які відображатимуть форму та результати.

Відкрийте application/config/routes.php та додайте наступні маршрути

$route['upload-image'] = 'imageuploadcontroller';
$route['store-image'] = 'imageuploadcontroller/store';

ТУТ,

  • $route['upload-image'] = 'imageuploadcontroller'; визначає URL upload-image, який викликає метод index ImageUploadController
  • $route['store-image'] = 'imageuploadcontroller/store'; визначає URL store-image, який приймає вибраний файл користувача та завантажує його на сервер.

Як виправити Common CodeПомилки завантаження файлу Igniter

Більшість помилок завантаження повертають чітке повідомлення з бібліотеки завантажень. У наведеному нижче списку зіставлено поширені помилки з їх виправленнями.

  • Тип файлу, який ви намагаєтеся завантажити, заборонений: додайте відсутнє розширення до конфігурації allowed_types, наприклад, 'gif|jpg|png|pdf'.
  • Файл, який ви намагаєтеся завантажити, перевищує дозволений розмір: підвищте max_size та переконайтеся, що upload_max_filesize та post_max_size у php.ini достатньо великі.
  • Шлях завантаження, схоже, недійсний: створіть каталог upload_path та переконайтеся, що веб-сервер має до нього дозвіл на запис.
  • Ви не вибрали файл для завантаження: Перевірте, чи ім'я вхідного поля відповідає аргументу do_upload() та чи форма використовує тип enctype multipart/form-data.

Тестування програми

Давайте запустимо вбудований PHP-сервер.

Відкрийте термінал або командний рядок і перейдіть до кореневого каталогу вашої програми. У моєму випадку кореневий каталог знаходиться на диску C:\Sites\ci-app

cd C:\Sites\ci-app

Запустіть сервер за допомогою наступної команди

php -S localhost:3000

Завантажте наступне URL у вашому веббраузері: http://localhost:3000/upload-image

Ви зможете побачити наступні результати

Завантаження зображень у CodeЗапалювач

Натисніть вибрати файл

Ви повинні побачити діалогове вікно, схоже на наведене нижче

Завантаження зображень у CodeЗапалювач

Виберіть потрібне зображення, а потім натисніть кнопку «Відкрити»

Завантаження зображень у CodeЗапалювач

Вибране ім'я файлу відобразиться у формі завантаження, як показано на зображенні вище. Натисніть кнопку «Завантажити зображення».

Ви отримаєте такі результати, якщо все пройде добре.

Завантаження зображень у CodeЗапалювач

Натисніть на посилання «Переглянути моє зображення!»

Ви маєте побачити завантажене зображення. Результати будуть подібними до наведених нижче.

Завантаження зображень у CodeЗапалювач

Зверніть увагу, що назва завантаженого зображення відображається в URLМи отримали назву зображення з метаданих завантаженого зображення.

Примітка: Процес завантаження файлів залишається таким самим для інших типів файлів.

Поширені запитання

Команда CodeБібліотека завантаження Igniter 3 обробляє один файл за один виклик do_upload(), тому ви перебираєте $_FILES та викликаєте її для кожного елемента. CodeIgniter 4 підтримує багаторазове завантаження безпосередньо через метод getFileMultiple().

Ні. CodeIgniter 4 замінює бібліотеку завантаження API запиту файлу. Ви викликаєте $this->request->getFile('field'), перевіряєте його, а потім використовуєте move() для збереження файлу, замість завантаження окремої бібліотеки завантаження.

Встановіть $config['encrypt_name'] = TRUE, щоб надати кожному файлу випадкове ім'я, або встановіть $config['file_name'] на вибране вами значення. Це запобігає перезапису існуючих файлів, які мають однакове оригінальне ім'я.

Так. Штучний інтелект може створювати білий список allowed_types, обмеження розміру та обробку помилок, а також пропонувати додаткові перевірки, такі як перевірка справжнього MIME-типу. Завжди тестуйте згенеровані правила на реальних файлах перед розгортанням.

Так. Вставте повідомлення про помилку та ваш контролер, і штучний інтелект зможе виявити проблеми, такі як відсутня багаточастинна форма, непридатний для запису шлях завантаження або відсутнє розширення в allowed_types, а потім запропонує виправлення.

Підсумуйте цей пост за допомогою: