7

Estoy usando CodeIgniter 2.1.0 y la base de datos MySQL. He subido una imagen a través de un formulario y la he almacenado correctamente en un directorio de carga y también he almacenado con éxito la ruta completa de la imagen en mi base de datos. pero estoy teniendo problemas para mostrar la imagen llamando a la ruta completa desde mi base de datos.¿Cómo mostrar la imagen de la base de datos en CodeIgniter?

Aquí está mi código para la carga:

$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); 

Cuando estoy almacenando la ruta completa de la imagen en mi base de datos, se ve algo como esto

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

si intento

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

este en mi archivo de vista, no se visualiza la imagen. ¿Qué estoy haciendo mal? Por favor, alguien dime. ¿Cuál es el procedimiento estándar?

+0

¿Por qué está almacenando la ruta completa como 'C:/wamp/www/my_project/uploads/_1_.jpg'? Eso no funcionará Debe consultar la ruta en el servidor web, no el sistema de archivos. – Flukey

+0

estoy usando $ image_path = realpath (APPPATH. '../uploads'); para obtener la ruta real en la base de datos. si no es el procedimiento estándar, ¿podría proporcionarlo? – Shabib

Respuesta

3

En su base de datos, si he entendido bien, usted está almacenando la imagen como C:/wamp/www/my_project/uploads/_1_.jpg

Así que cuando usted está haciendo eco de la ruta de la imagen el atributo img src, tendrá

que ganó No funciona como esta ruta local en su máquina. No tendré esa imagen en mi sistema de archivos. La imagen debe estar accesible en el servidor web. (Como su archivo index.php)

por lo que necesita el almacén de la imagen, ya sea como esto:

uploads/_1_.jpg

y luego hacer <img src="<?php echo $data['screenshot'];?>" />

O guardar la imagen como:

_1_.jpg y y luego hacer

<img src="<?php echo sprintf("uploads/%s", $data['screenshot']);?>" />

EDITAR: Para ser claros: Donde lo está almacenando es correcto. Pero, no necesita la ruta completa en la base de datos, solo necesita la ruta del servidor web.

+1

gracias :) funciona ahora @flukey – Shabib

2

controlador:

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

Modelo:

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;} 

Su Vista:

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

modelo alternativo:

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 : ''; 
} 
+1

¿podría explicar un poco el código? – Shabib

+0

Por lo tanto, en su archivo vew, refiere su controlador, método e identificación de imagen ..., echo site_url se usa para mostrar imágenes. En su controlador, necesita crear un método para imprimir la imagen. Este método tiene que llamar al modelo de imagen para obtener la url de la imagen mediante una consulta sql – coppettim

+1

¿Por qué haces 'header (" Content-type: image/jpeg ");' this? él no está almacenando la imagen en el DB. Está almacenando el nombre de la imagen. La imagen se almacena en el sistema de archivos. Y en su función 'getImage', si el recurso no existe, entonces devuelva' false' no '''' – Flukey

1

Para mostrar imágenes en el navegador web, debe proporcionar la URL de esa imagen en lugar de la RUTA de la imagen.

siguiente código no muestra ninguna imagen

<img src="C:/wamp/www/my_project/uploads/_1_.jpg"/> 

siguiente código de URL que se utiliza de la imagen, aquí se da el nombre del servidor localhost, usted tiene que reemplazar la dirección del servidor por localhost.

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