2016年9月30日 星期五

[PHP]上傳圖片至MySQL (使用 LONGBLOB儲存檔案)

我比較常用的方法是把檔案上傳到Server,然後DB裡只存路徑;把圖片直接存在資料庫的做法不常用到,最近花了一點時間才把它做出來。
兩種儲存上傳檔案的方法各有利弊,要根據自己的需求來選擇。

首先在資料庫內新增一個欄位,型態設為BLOB或LONGBLOB(看要存的檔案大小)



然後加上選擇檔案上傳的程式碼,submit後連到upload.php
<form id="form1" enctype="multipart/form-data" action="upload.php" method="post" >
    <input type='file' id="file" name="file" />
    <input type="submit" value="Submit" class="btnSubmit" />
</form>       

upload.php
<?php
require_once("connMysql.php");//匯入連接DB的程式
$tmpname=$_FILES['file']['tmp_name'];
$fp= fopen($tmpname, 'r');
$fileContent=fread($fp,filesize($tmpname));

$file_uploads = base64_encode($fileContent);

//加入UPDATE 或是 INSERT SQL指令
$sql = "UPDATE `XXX` SET `pic`='data:image/png;base64,".$file_uploads."' where `XXX`=XXX";
$current_id = mysql_query($sql) or die("<b>Error:</b> Problem on Image Insert<br/>" .mysql_error());

fclose($fp);

if(isset($current_id)) {
        echo '<script language="javascript">
         history.back(1);
        </script>';
}
?>

若是不加上 $file_uploads = base64_encode($fileContent);這行,會一直出現錯誤,查過資料後似乎是因為 PHP對DB沒有二進位的讀寫方法 '  ,所以要先做base64編碼再存進DB,不確定對不對就是了。
存入DB時也要記得加data:image/png;base64,在$file_uploads前面。

BLOB還可以存其他類型的檔案,這個程式只是我用來存圖片的精簡版而已,其他的以後有機會再來研究吧!

1 則留言 :