如何将图像存储在数据库中

时间:2015-08-08 19:15:45

标签: php database codeigniter

这是我的网站“CodeIgniter”框架和我创建的数据库

my personal website

如果您点击第一页墙上的图像,您将进入此类别以查看所有图像,您可以看到某些图像无法显示,这是因为当我创建数据库时,我放了我的Facebook个人资料中的所有图像,将每个图像的网址复制到数据库中,然后通过php用“foreach”显示它们,但Facebook不时更改其网址,这使网址不再链接到图像。

我已经尝试从我的Google云端硬盘中获取图片的网址了,更糟糕的是,通过借用第三方网址存储许多图片(200+)并不是一种稳定的方式,有人能告诉我正确而稳定的方式要做到这一点?

非常感谢!

2 个答案:

答案 0 :(得分:1)

根据您的要求,最好将图像存储在文件系统中(更好的缓存(服务器和客户端)|减少数据库负载)并节省用户带宽(返回用户)并保存相应的数据库中的文件路径。但是你必须优雅地处理缓存。请考虑Amazon Web服务S3存储服务。

有待进一步参考:以下是Codeigniter文档中的代码段。

此致 HBK

答案 1 :(得分:0)

数据库:

CREATE TABLE `app_files` (
  `file_id` int(10) NOT NULL AUTO_INCREMENT,
  `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `file_data` longblob NOT NULL,
  PRIMARY KEY (`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

将图像保存到模型:

if(!empty($_FILES["company_logo"]) && $_FILES["company_logo"]["error"] == UPLOAD_ERR_OK && !is_on_demo_host())
{
    $allowed_extensions = array('png', 'jpg', 'jpeg', 'gif');
    $extension = strtolower(pathinfo($_FILES["company_logo"]["name"], PATHINFO_EXTENSION));

    if (in_array($extension, $allowed_extensions))
    {
        $config['image_library'] = 'gd2';
        $config['source_image'] = $_FILES["company_logo"]["tmp_name"];
        $config['create_thumb'] = FALSE;
        $config['maintain_ratio'] = TRUE;
        $config['width']     = 170;
        $config['height']   = 60;
        $this->load->library('image_lib', $config); 
        $this->image_lib->resize();
        $company_logo = $this->Appfile->save($_FILES["company_logo"]["name"], file_get_contents($_FILES["company_logo"]["tmp_name"]), $this->config->item('company_logo'));
    }
}

型号:

<?php
class Appfile extends CI_Model 
{       
    function get($file_id)
    {
        $query = $this->db->get_where('app_files', array('file_id' => $file_id), 1);

        if($query->num_rows()==1)
        {
            return $query->row();
        }

        return "";

    }

    function save($file_name,$file_data, $file_id = false)
    {
        $file_data=array(
        'file_name'=>$file_name,
        'file_data'=>$file_data
        );

        if (!$file_id)
        {
            if ($this->db->insert('app_files',$file_data))
            {
                return $this->db->insert_id();
            }

            return false;
        }

        $this->db->where('file_id', $file_id);
        if ($this->db->update('app_files',$file_data))
        {
            return $file_id;
        }

        return false;
    }

    function delete($file_id)
    {
        return $this->db->delete('app_files', array('file_id' => $file_id)); 
    }
}

?>

观看图片:

    $file = $this->Appfile->get($file_id);
    header("Content-type: ".get_mime_by_extension($file->file_name));
    echo $file->file_data;