php - 使用 CodeIgniter 从 MySQL 数据库检索图像,而不使用上传库。是否可以?

标签 php mysql image codeigniter codeigniter-3

我想要做的是使用 html 表单将图像上传到我的 SQL 数据库,然后从数据库中检索它以显示它。我将向您展示一些代码,以便您能够理解我想要做什么。

第一次编辑: 只是链接图像以显示我要将图像上传到的数据库表。行类型为 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 Controller :

        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']); 使用 post 检索到的数据然后发送到我的模型中的 addEvent:

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

为了检索图像,我使用带有 src 的图像标签来调用 Controller 中的函数:

<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,所以我仍在学习。

最佳答案

我在没有使用 CI_Upload 的情况下完成了类似的过程。

一个有用的调试是,使用一些数据库工具,将 blob 保存到文件中并尝试显示它(使用 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 可以找到 here :

显示图像

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

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

    echo $im_produto;
}

希望有帮助。

关于php - 使用 CodeIgniter 从 MySQL 数据库检索图像,而不使用上传库。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425394/

相关文章:

PHPUnit:如何通过被测方法模拟内部调用的函数

php - iOS JSON响应两次,JSON空

php - 从数据库中选择列中的值不同的数据

php - 使用 LEFT JOIN 结合 WHERE 子句进行搜索

phpmyadmin blob php image out encrypted, 想在网页上显示blob图片

css - IE8下有些图片闪烁

c# - 在数据库中存储图像 - 网络桌面应用程序

javascript - 忘记密码 php 中的代码不起作用

php - MySQL 查询 SELECT 与 IF(xxxx 已存在) 递归

asp.net - System.Byte[] 在gridview 中显示而不是图像?