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

0

То, что я хочу сделать, это загрузить изображение в мою базу данных 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 данные на контроллер 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 или в моем коде что-то не так, что изображения не отображаются при вызове?

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

  • 0
    $image = file_get_contents($_FILES['image']['tmp_name']); по крайней мере используйте move_uploaded_file() или is_uploaded_file() . This is useful to help ensure that a malicious user hasn't tried to trick the script into working on files upon which it should not be working
  • 0
    Какой тип поля вы храните в blob и т. Д. Если это поле не поддерживает двоичные файлы, у вас возникнут некоторые проблемы ... Is the library the only way to retrieve images using CI - изображения существовали в базах данных задолго до того, как CI имел загрузив библиотеку, я заново сделал сайт, созданный в 2000 году (возможно, в 2009 году), на котором было более 300 ГБ данных изображений в БД (это было не весело), но это был не CI, и изображения работали просто отлично. Лично мне не нравится хранить данные изображения в БД из-за прошлого опыта (как выше). Перенос БД такого размера не очень приятен.
Показать ещё 1 комментарий
Теги:
codeigniter
image
codeigniter-3

1 ответ

0
Лучший ответ

Я сделал аналогичный процесс без использования 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;
}

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

  • 0
    Я получил некоторую помощь от своего руководителя, и примерно через 2 часа, проанализировав изображение, как вы предложили, особенно его двоичный код, мы выяснили, что изображение загружается, кодируется и визуализируется должным образом в формате JPEG, но что мешало его отображению был ... какой-то пробел, который у меня был в начале и в конце контроллера. Вот некоторый код, объясняющий, что я имею в виду: `` `<--- пробельные символы загружаются с определенным изображением <? Php ('BASEPATH') ИЛИ exit ('Прямой доступ к сценарию запрещен'); }?> пробел ---> `` `
  • 0
    Рад, что это помогло!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню