图像已保存但未返回(无响应)

I'm trying to fetch data and an image from a database after saving them. The data and the image are saved correctly, but when I try to read them, an error occurs. I can't solve the problem.

My views are:

view1 is Upload_form.php:

<html>
    <head> 
     <title>Upload Form</title> 
    </head>
    <body> 
     <?php echo $error;?> 
     <?php echo form_open_multipart('upload/do_upload');?> 
     <form action = "" method = "">
       <input type = "text" name = "title" /> 
       <br /><br /> 
       <input type = "file" name = "userfile" size = "20" /> 
       <br /><br /> 
       <input type = "submit" value = "upload" name="file_name"/> 
     </form> 
   </body>
</html>

view2 is Upload_success.php:

<html>
  <head> 
     <title>Upload Form</title> 
  </head>
  <body>  
     <h3>Your file was successfully uploaded!</h3>  
     <?php foreach ($image as $item) { ?>
        <P> <?php echo $item['title']; ?> </P>
        <img src="<?php echo base_url().'uploads/'. $item['image']; ?>">
     <?php } ?>
     <ul> 
        <?php foreach ($upload_data as $item => $value) { ?> 
        <li><?php echo $item;?>: <?php echo $value;?></li> 
        <?php } ?>
     </ul>  
     <p><?php echo anchor('upload', 'Upload Another File!'); ?></p>  
  </body>
</html>

I think the error is in the else statement. Please check it out.

Controller's name is upload.php:

  <?php

     class Upload extends CI_Controller 
     {

        public function __construct() { 
           parent::__construct(); 
           $this->load->model('model','m');
           $this->load->helper(array('form', 'url')); 
        }

        public function index() { 
           $this->load->view('upload_form', array('error' => ' ' )); 
        } 

        public function do_upload() 
        { 
           $config['upload_path']   = './uploads/'; 
           $config['allowed_types'] = 'gif|jpg|png'; 
           $config['max_size']      = 100; 
           $config['max_width']     = 1024; 
           $config['max_height']    = 768;  
           $this->load->library('upload', $config);

           if ( ! $this->upload->do_upload('userfile')) 
           {
              $error = array('error' => $this->upload->display_errors()); 
              $this->load->view('upload_form', $error); 
           }

           else 
           {  
              $this->m->insertdata();
              $data = array('upload_data' => $this->upload->data()); 
              $this->load->view('upload_success',  $data); 
           } 
        } 
     } 

Model's name is model.php:

<?php
    class model extends CI_Model
    {
        function __construct()
        {
            parent::__construct();
            $this->load->database();
        }
        public function insertdata()
        {

                $upload_data = $this->upload->data();
                $data = array(
                    'name' => $this->input->post('title'),
                    'image' => $upload_data['file_name'],
                );
                $this->db->insert('image', $data);
                $id= $this->db->insert_id();

                $this->db->select('*');
                $this->db->from('image');
                $this->db->where('id', $id);
                $d = $this->db->get();
                return $d->result();
        }
    }

This is my way to upload and show image. Hope it will be help you far most. In Your Controller:

            if (count($_FILES) > 0) 
            {
                // upload Profile Picture
                $config['upload_path']   = './uploads/profile_pic/';
                $config['allowed_types'] = 'jpg|jpeg|png|JPG|JPEG|PNG';

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

                $this->upload->initialize($config);

                $is_profile_pic = $this->upload->do_upload('profilePic');

                if ($is_profile_pic) 
                {
                    $ret    = $this->upload->data();
                    $pic    = $ret['file_name'];
                }
                else
                {
                    $pic = "";
                }
            }

                $data = array(
                        'profile_pic'       => $pic 
                 );

                $this->User_Model->insert_into_users($data);

Get the name of the file from database table and pick this file from the uploads folder to show in your view like this:

  <img class="img-responsive avatar-view" src="<?php echo base_url() . 'uploads/profile_pic/'.$employee->profile_pic; ?>" alt="Avatar">

It is much simple and perfectly working in my project. You are trying a bit harder.

The else in Controller should be like this :

else 
{  
    $data['image'] = $this->m->insertdata();
    $data['upload_data'] = $this->upload->data(); 
    $this->load->view('upload_success',  $data); 
}

In your view2 (Upload_success.php), you try to display your images with:

<?php foreach ($image as $item) { ?>
    <P> <?php echo $item['title']; ?> </P>
    <img src="<?php echo base_url().'uploads/'. $item['image']; ?>">
<?php } ?>

This is not working because you call $image variable which is not defined from your controller. You load your view with that code:

$data = array('upload_data' => $this->upload->data()); 
$this->load->view('upload_success',  $data); 

The only variable you will be able to access in your view is $upload_data. If you do <?php var_dump($upload_data); ?> in your success view, you will find the result of your upload in an array with these keys:

Array
(
    [file_name]     => mypic.jpg
    [file_type]     => image/jpeg
    [file_path]     => /path/to/your/upload/
    [full_path]     => /path/to/your/upload/jpg.jpg // You need this one!
    [raw_name]      => mypic
    [orig_name]     => mypic.jpg
    [client_name]   => mypic.jpg
    [file_ext]      => .jpg
    [file_size]     => 22.2
    [is_image]      => 1
    [image_width]   => 800
    [image_height]  => 600
    [image_type]    => jpeg
    [image_size_str] => width="800" height="200"
)

In your view, you already use this to display keys/values:

<ul> 
    <?php foreach ($upload_data as $item => $value) { ?> 
    <li><?php echo $item;?>: <?php echo $value;?></li> 
    <?php } ?>
</ul>  

Solution: You just have to get full_path key and display your image, like so:

<html>
  <head> 
     <title>Upload Form</title> 
  </head>
  <body>  
     <h3>Your file was successfully uploaded!</h3>  
     <img src="<?php echo base_url() . $upload_data['full_path']; ?>" alt="" />
     <p><?php echo anchor('upload', 'Upload Another File!'); ?></p>  
  </body>
</html>

More details: Documentation