2015-08-08 81 views
1

,这里是我的网站由框架“笨”,并与我创建如何将图像存储在数据库中

my personal website

数据库,如果你在第一页点击墙上的图像制成,您将进入该类别以查看所有图像,您可以看到某些图像无法显示,这是因为当我创建数据库时,我将所有图像放在我的脸书个人档案中,将每个图像的网址复制到数据库中,然后用“foreach”通过php显示它们,但facebook不时更换它们的URL,这使得URL不再链接到图像。

我已经试图从我的Google驱动器中获取图片的URL,它更糟糕,所以通过借用第三部分网址来存储很多图片(200+)并不是一个稳定的方法,有人可以告诉我正确和稳定如何做到这一点?

非常感谢!

+0

可以在Google有很多教程,用于存储数据库的详细说明图像/ IMG路径不能是可在这里... :)希望大家理解 – Linus

回答

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; 
+0

你好,我是一个网络开发初学者,我不会理解你的答案,请给我更多的解释,比如在哪里写什么,谢谢 –

+0

如果你不明白这个例子,我建议你回到PHP 101。 – SysVoid

+1

我不知道如何能更好地解释它。您需要在应用程序/模型中创建一个“Appfile”模型。创建数据库表,然后将用于保存和查看图像的代码放入要执行此操作的控制器中。 –

1

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

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

问候, HBK

+0

嗨,我想在数据库中保存相应文件路径的方式会很流行,但怎么样?我把所有图像放在一个文件夹中调用“all img”,然后将其上传到服务器,但我不知道如何在数据库中保存文件路径,它不像在html中的'src'中img标签。 –

+0

@JiangLan在参考文献中提到了如何使用文件上传。你能提供更多关于你创建的模型/表格的信息吗? – HBK

相关问题