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

Завантаження файлу CodeIgniter

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

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

Завантаження зображень у CodeIgniter

Завантаження файлу в CodeIgniter має дві основні частини. Інтерфейс і бекенд. Інтерфейс обробляється формою 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('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 у додаток/контролери

Додайте наступний код до 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, який ми визначили вище.
    • 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 upload-image, який викликає метод індексу ImageUploadController
  • $route['store-image'] = 'imageuploadcontroller/store'; визначає URL-адресу store-image, яка приймає вибраний файл користувача та завантажує його на сервер.

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

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

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

cd C:\Sites\ci-app

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

php -S localhost:3000

Завантажте наступну URL-адресу у свій веб-переглядач: http://localhost:3000/upload-image

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

Завантаження зображень у CodeIgniter

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

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

Завантаження зображень у CodeIgniter

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

Завантаження зображень у CodeIgniter

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

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

Завантаження зображень у CodeIgniter

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

Ви повинні побачити зображення, яке ви завантажили. Результати будуть подібні до наступного

Завантаження зображень у CodeIgniter

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

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