在php中显示blob图像

时间:2017-03-07 17:10:09

标签: php image blob

我正在尝试使用图片源显示博客图片。以下是我如何使用php将图像插入MYSQL数据库并存储到名为“picture”的目录中。插入成功

<form method="post" action="post.php" enctype ="multipart/form-data">
  <input type="file" accept="image/png, image/jpeg, image/gif"  name="image" id="image"/> 
   <input type="submit" name="post" value="Post" class="btn btn-primary btn btn-info"/>
 </form>

  if (isset($_POST['post']) && isset($_FILES['image'])) {
   $target_dir = "picture/";
    $target_file = $target_dir . basename($_FILES["image"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    $image=basename( $_FILES["image"]["name"],".jpg");
    $stmt = "INSERT INTO post (image) values (:image)";
    $p = $MySQLi_CON -> prepare($stmt);
    $results = $p -> execute(array(
                    ":image" => $image
                ));
    }

然而,这里的问题是当我尝试在img-src中显示它时,图像链接被破坏并且它不显示任何内容。我试过echo $key['image'],它似乎输出了正确的图像名称而不是图像本身

<tbody>
          <?php 
                     $query = "SELECT * FROM test";
                     $data = $MySQLi_CON->query($query);
                     foreach ($data as $key ) {
                   ?>
          <tr class="active">
            <td><div class = "col-sm-6 col-md-2">
      <a  class = "thumbnail">
        <?php echo '<img src="data:image/jpeg;base64,'.base64_encode( $key['image'] ).'" alt = "Generic placeholder thumbnail"/>';?>        
      </a>
   </div></td>  
            <td><?php echo $key['image'];?></td> //it gives value such as picture.jpg, image.png
          </tr>
                <?php
                  }
                  ?>          
   </tbody>

1 个答案:

答案 0 :(得分:0)

您没有在$ image变量中存储完整路径,尝试类似:

$ image = $ target_dir。 basename($ _FILES [&#34; image&#34;] [&#34; name&#34;]。&#34; .jpg&#34;);

还要考虑&#34; basename&#34;上的手册: http://php.net/manual/en/function.basename.php

您可能还想考虑将数据库中的路径视为坏事,因为如果文件结构中的路径发生更改,则会导致各种有趣的事情发生。

您可以像现在一样只保存文件名来避免破坏,只需更正basename语句中的扩展名问题,然后在显示代码上添加文件名的路径。

如果您不介意使用大型数据库,则可以将图像源存储在数据库中。我通常不会在数据库字段中推荐源代码,但是在记录很少的小型表上你应该没问题。

希望有所帮助。