Получение изображения из базы данных MySQL с помощью CodeIgniter без использования библиотеки загрузки.Является ли это возможным? - PullRequest
0 голосов
/ 29 марта 2019

Что я хочу сделать, это загрузить изображение в мою базу данных sql, используя HTML-форму, а затем извлечь его из базы данных, чтобы отобразить его. Я покажу вам некоторый код, чтобы вы могли понять, что я пытаюсь сделать.

1-е РЕДАКТИРОВАНИЕ: Просто связать изображение, чтобы показать таблицу базы данных, в которую я загружаю изображение. Тип строки blob -> https://imgur.com/a/KBlNWWN. В приведенном ниже коде я отредактировал остальные строки таблицы БД, но код для них на самом деле есть.

Это форма загрузки изображения:

<form method="POST" action="/~gd339/ci/index.php/Add/postEvent/<?php echo $societyId ?>" enctype="multipart/form-data">
    Event image: <input type="file" name="image"/> <br>
    <input type="submit" name="POST" value="Post Event!" class = "unique"/>

Он отправляет данные на контроллер postEvent:

        public function postEvent($society_id) {

            $this->load->model('Events_model');
                $image = file_get_contents($_FILES['image']['tmp_name']);
            $this->Events_model->addEvent($image);

        }

Обратите внимание, что для получения изображения из формы я использую $image = file_get_contents($_FILES['image']['tmp_name']); данные, полученные с помощью записи, затем отправляются на addEvent в моей модели:

        public function addEvent ($image) {
        $image1 = $this->db->escape($image);
        $sql = "INSERT INTO events (event_image) VALUES ($image1)";
            $query = $this->db->query($sql);
        }

Для извлечения изображения я использую тег изображения с src, который вызывает функцию в контроллере:

<img src="http://dragon.maple.as.re/~gd339/ci/index.php/add/getEventImage/<?php echo $row['event_id'] ?>">
        public function getEventImage($event_id){

                $this->load->model('Societies_model');
                $image = $this->Societies_model->getEventImage($event_id);
                header("Content-type: image/jpeg");
                print($image);
        }

код для getEventImage:

        public function getEventImage($event_id) {
            $data = '';
            $sql = "SELECT event_image FROM events WHERE event_id = $event_id";
            $query = $this->db->query($sql);
            if ($query->num_rows()) {
                $data = $query->row_array();
                $data = $data['MA_PHOTO'];
                $query->free_result();
            }
            return $data;
        }

В результате изображение просто не отображается. Я читал другие примеры здесь на stackoverflow, и все они, кроме 1, используют библиотеку загрузки CI, чтобы делать то, что я пытаюсь сделать. Является ли библиотека единственным способом получения изображений с помощью CI или в моем коде что-то не так, что изображения не отображаются при вызове?

Большое спасибо тому, у кого хватит терпения просмотреть мой код. Я знаю, что это много, но я впервые использую CI, поэтому я все еще учусь.

1 Ответ

0 голосов
/ 01 апреля 2019

Я выполнил аналогичный процесс без использования CI_Upload.

Полезной отладкой является то, что с помощью некоторого инструмента db сохраните блоб в файл и попытайтесь отобразить его (используя mspaint, средство просмотра изображений и т. Д.) *

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

private function get_image_resized($data){
  $data = smart_resize_image (
          null,
          $data,
          250,
          0,
          true,
          'return');
  $temp_file = tempnam(sys_get_temp_dir(), 'ImageResize');
  imagejpeg($data, $temp_file, 100);
  $data = file_get_contents($temp_file);
  unlink($temp_file);
  return $data;
}

smart_resize_image можно найти здесь :

Для отображения изображения

function imagem($cd_produto){
    $im_produto = $this->produto_model->get_imagem ( $cd_produto );

    header ( "Content-type:image/jpeg" );

    echo $im_produto;
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...