如何在CodeIgniter中从数据库中显示图像?

7
我是使用CodeIgniter 2.1.0和MySQL数据库。我通过一个表单上传了一张图片,并成功地将其存储在uploads目录中,同时也成功地将图片的完整路径存储在我的数据库中。但是,当我从数据库中调用完整路径时,显示图片出现问题。
以下是我的上传代码:
$image_path = realpath(APPPATH . '../uploads');

$config = array(
    'allowed_types' => 'jpeg|png|gif|jpg', 
    'upload_path' => $image_path, 
    'max_size' => 2097152, 
    'overwrite' => TRUE, 
    'file_name' => '_' . $i . '_'
);

$this -> load -> library('upload', $config);

当我将图像的完整路径存储在数据库中时,它看起来像这样:

C:/wamp/www/my_project/uploads/_1_.jpg

如果我尝试

<img src="<?php echo $data['screenshot'];?>" />
//($data['screenshot'] refers to the image location retrieved from database)

在我的视图文件中,没有显示任何图像。我做错了什么?请有人告诉我。标准程序是什么?

为什么要存储完整路径,例如 C:/wamp/www/my_project/uploads/_1_.jpg?那样行不通。你需要引用 Web 服务器上的路径,而不是文件系统的路径。 - Flukey
我正在使用 $image_path = realpath(APPPATH . '../uploads'); 来获取数据库中的真实路径。如果这不是标准操作,您能提供一下吗? - Shabib
3个回答

3
在你的数据库中,如果我理解正确的话,你是将图像存储为C:/wamp/www/my_project/uploads/_1_.jpg
因此,当你在img src属性中回显图像路径时,你会有:

这不起作用,因为这是你机器上的本地路径。我在我的文件系统上没有那个图像。图像需要在Web服务器上访问。(就像你的index.php文件一样)

所以你需要将图像存储为以下两种方式之一: uploads/_1_.jpg,然后执行 <img src="<?php echo $data['screenshot'];?>" /> 或者将图像存储为:_1_.jpg 然后执行 <img src="<?php echo sprintf("uploads/%s", $data['screenshot']);?>" /> 编辑:明确一点:你存储它的位置是正确的。但是,你不需要在数据库中使用完整路径,只需要使用Web服务器路径即可。

2

控制器:

function displayimage($Id=FALSE){
if ($Id)) 
{
    $image = $this->MMarches->getImage($Id);
    header("Content-type: image/jpeg");
    print($image);
}        }

模型:

function getImage($Id){
$data = '';
$Q = $this->db->query("SELECT photo FROM tableWHERE phptoID=".$Id);
if ($Q->num_rows())
{
    $data = $Q->row_array();
    $data = $data['MA_PHOTO']
    $Q->free_result();  
}
return $data;} 

你的观点:

src="<?php echo site_url("controller_name/display_image/$image_id"); ?>" 

备选模型:

function getImage($Id){
$Q = $this->db->query("SELECT photo FROM tableWHERE phptoID=".$Id);
   if ($Q->num_rows())       {
           $data = $Q->row_array();
           $data = $data['MA_PHOTO'];
           $Q->free_result();  
   }    
   $size = $data->size();        
   $ret = $data->read($size);     
   return (isset($ret)) ? $ret : '';
 }

所以,在您的视图文件中,您引用了您的控制器、方法和图像ID... echo site_url 用于显示图像。在您的控制器中,您需要创建一个方法来打印图像。这个方法必须通过 SQL 查询调用图像模型来获取图像 URL。 - groovekiller
1
你为什么要这样做 header("Content-type: image/jpeg");?他没有将图像存储在数据库中,而是存储了图像名称。该图像存储在文件系统中。在你的 getImage 函数中,如果资源不存在,则应返回 false 而不是 '' - Flukey
@Flukey,你能提供一个解决方案吗? - Shabib

1
在网页浏览器中显示图片时,您必须提供该图片的URL而不是路径。
以下代码不会显示任何图像。
<img src="C:/wamp/www/my_project/uploads/_1_.jpg"/> 

以下代码使用了图像的URL,这里给出了本地主机名称,您需要将其替换为您的服务器地址。

<img src="http://localhost/www/my_project/uploads/_1_.jpg"/> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接