这是我的网站“CodeIgniter”框架和我创建的数据库
如果您点击第一页墙上的图像,您将进入此类别以查看所有图像,您可以看到某些图像无法显示,这是因为当我创建数据库时,我放了我的Facebook个人资料中的所有图像,将每个图像的网址复制到数据库中,然后通过php用“foreach”显示它们,但Facebook不时更改其网址,这使网址不再链接到图像。
我已经尝试从我的Google云端硬盘中获取图片的网址了,更糟糕的是,通过借用第三方网址存储许多图片(200+)并不是一种稳定的方式,有人能告诉我正确而稳定的方式要做到这一点?
非常感谢!
答案 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;