[PHP,MySQL]圖片上傳和讀取 使用base64_encode & base64_decode




2017/08/10更新 classicBookShareUpLoad.php 刪除一些沆碼
2017/08/10更新 更新後第二段SQL與第三段SQL會對不上,請自行修改

此篇主要是做紀錄用然後稍作一些修改,主要參考自:
http://www.webtech.tw/info.php?tid=24
http://forum.twbts.com/thread-3299-1-1.html
http://stackoverflow.com/questions/16262098/displaying-a-base64-images-from-a-database-via-php

摘要:
base64_encode主要是使上傳結果正確

$_FILES["file"]["type"]的紀錄是為了讓讀圖的時候能有正確的解碼方式(即資料庫除了存圖片的空間外還要另外設置一個欄位儲存file type)

資料庫設置:
圖片存放空間:mediumblob
圖片型態存放空間:varchar(50)

上傳頁面:

<html>
<body>
<Form Action="classicBookShareUpLoad.php" Method="POST" 
Enctype="multipart/form-data">
<Input Type="File" Name="upfile" ><br>
<Input Type="Submit" value=" 開始上傳 ">
</Form>
</body>
</html>

classicBookShareUpLoad.php:

<?php include("loginStaCheck.php");?>
<?php

  //開啟圖片檔
  $file = fopen($_FILES["upfile"]["tmp_name"], "rb");
  // 讀入圖片檔資料
  $fileContents = fread($file, filesize($_FILES["upfile"]["tmp_name"])); 
  //關閉圖片檔
  fclose($file);
  //讀取出來的圖片資料必須使用base64_encode()函數加以編碼:圖片檔案資料編碼
   $fileContents = base64_encode($fileContents);
  
  //連結MySQL Server
  require("./php/dbCon.php");
  //組合查詢字串
    $imgType=$_FILES["upfile"]["type"];
    $sql="INSERT INTO speechPost (img,imgType) VALUES ('$fileContents','$imgType')";

    //
    if($conn->query($sql) === TRUE) {
        echo "成功";
    } 
    else {
      //echo "Error: " . $sql . "<br>" . $conn->error;
        echo "失敗";
    }

  $conn->close();
?>

※補充
$_FILES["file"]["name"]:上傳檔案的原始名稱。
$_FILES["file"]["type"]:上傳的檔案類型。
$_FILES["file"]["size"]:上傳的檔案原始大小。
$_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。
$_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。

從資料庫讀出圖片:

<?php
include("./php/dbCon.php");
$sql="SELECT * FROM classicBookShare WHERE count=12";
$result = $conn->query($sql);
$conn->close();

 //查詢結果
 if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
   $img=$row["bookImage"];
   $logodata = $img;
   echo '<img src="data:'.$row['imgType'].';base64,' . $logodata . '" />';
  }
 }
 else{

 }
 echo $img;
?>

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料