2015-08-08 69 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