php實現上傳圖片保存到數據庫的方法。具體分析如下:
高昌ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯建站的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
php 上傳圖片,一般都使用move_uploaded_file方法保存在服務器上。但如果一個網站有多臺服務器,就需要把圖片發布到所有的服務器上才能正常使用(使用圖片服務器的除外)
如果把圖片數據保存到數據庫中,多臺服務器間可以實現文件共享,節省空間。
首先圖片文件是二進制數據,所以需要把二進制數據保存在mysql數據庫。
mysql數據庫提供了BLOB類型用于存儲大量數據,BLOB是一個二進制對象,能容納不同大小的數據。
BLOB類型有以下四種,除存儲的最大信息量不同外,其他都是一樣的。可根據需要使用不同的類型。
TinyBlob?????? 最大 255B
Blob????????????? 最大 65K
MediumBlob? 最大 16M
LongBlob????? 最大 4G
數據表photo,用于保存圖片數據,結構如下:
CREATE?TABLE?`photo`?(??
`id`?int(10)?unsigned?NOT?NULL?auto_increment,??
`type`?varchar(100)?NOT?NULL,??
`binarydata`?mediumblob?NOT?NULL,??
PRIMARY?KEY??(`id`)??
)?ENGINE=MyISAM?DEFAULT?CHARSET=latin1?AUTO_INCREMENT=1?;
upload_image_todb.php代碼如下:
?php??
//?連接數據庫??
$conn=@mysql_connect("localhost","root","")??or?die(mysql_error());??
@mysql_select_db('demo',$conn)?or?die(mysql_error());?//?判斷action??
$action?=?isset($_REQUEST['action'])??$_REQUEST['action']?:?'';?
//?上傳圖片??
if($action=='add'){??
$image?=?mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));??
$type?=?$_FILES['photo']['type'];??
$sqlstr?=?"insert?into?photo(type,binarydata)?values('".$type."','".$image."')";??
@mysql_query($sqlstr)?or?die(mysql_error());??
header('location:upload_image_todb.php');??
exit();??
//?顯示圖片??
}elseif($action=='show'){??
$id?=?isset($_GET['id'])??intval($_GET['id'])?:?0;??
$sqlstr?=?"select?*?from?photo?where?id=$id";??
$query?=?mysql_query($sqlstr)?or?die(mysql_error());??
$thread?=?mysql_fetch_assoc($query);??
if($thread){??
header('content-type:'.$thread['type']);??
echo?$thread['binarydata'];??
exit();??
}??
}else{??
//?顯示圖片列表及上傳表單??
???
!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?""??
html??
head??
meta?http-equiv="content-type"?content="text/html;?charset=utf-8"??
title?upload?image?to?db?demo?/title??
/head??
body??
form?name="form1"?method="post"?action="upload_image_todb.php"?enctype="multipart/form-data"??
p圖片:input?type="file"?name="photo"/p??
pinput?type="hidden"?name="action"?value="add"input?type="submit"?name="b1"?value="提交"/p??
/form??
?php??
$sqlstr?=?"select?*?from?photo?order?by?id?desc";??
$query?=?mysql_query($sqlstr)?or?die(mysql_error());??
$result?=?array();??
while($thread=mysql_fetch_assoc($query)){??
$result[]?=?$thread;??
}??
foreach($result?as?$val){??
echo?'pimg?
src="upload_image_todb.php?action=showid='.$val['id'].'t='.time().'"
width="150"/p';??
}??
???
/body??
/html??
?php??
}??
?
程序運行截圖和數據庫截圖:
//?獲取文件名
$filename=$_FILES["fileToUpload"]["name"].'.'$_FILES["fileToUpload"]["tmp_name"];
$mysqli?=?new??mysqli($dbhost,$dbuser,$dbpwd,$dbname);
if?(mysqli_connect_errno()){?//注意mysqli_connect_error()新特性
die('Unable?to?connect!').?mysqli_connect_error();
}
$sql?=?"SET?NAMES?".$charName;
$mysqli-query($sql);
$sql="?insert?into?tbname?(filenane)??values?('".$filename."')";
$mysqli-query($sql);?//插入新紀錄
把你圖片上傳那中間的一段代碼改成這個:
//圖片上傳
$files_arr?=?[];
foreach($_FILES['pictures']['error']?as?$key?=?$error)?{
if($error?==?UPLOAD_ERR_OK)?{
$tmp_name?=?$_FILES['pictures']['tmp_name'][$key];
$name?=?date('Ymd').rand(1000,?9999).$_FILES['pictures']['name'][$key];
$dir?=?'upload/';
$filenameurl?=?$dir.$name;
$files_arr[]?=?$filenameurl;
move_uploaded_file($tmp_name,?$filenameurl);
}
}
$filenameurl?=?join(',',?$files_arr);
?php
$filename = $_POST['filename'];
$explain = $_POST['explain'];
$upfile = $_FILES['upfile'];
if(is_uploaded_file($upfile['tmp_name']) $upfile['size']0){
$filepath = './'.$upfile['name'];
move_uploaded_file($upfile['tmp_name'],$filepath);
$res = mysql_query("INSERT INTO 表(filename,explain,filepath) VALUES('$filename','$explain','$filepath')");
if($res){
echo '添加成功!';
exit();
}
}
?
form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"
p
input type="text" name="filename" id="filename" /
/p
p
input type="text" name="explain" id="explain" /
/p
p
input type="file" name="upfile" id="upfile" /
/p
p
input type="submit" name="button" id="button" value="提交" /
/p
/form
1.新建一個表存儲;
2.也可以新建一個字段存儲;
如果一個圖片,選擇2;
多張圖片,選擇1
原理都一樣,循環接參,你打印一下它的參數就夠就明白了,存儲數據庫,可以將圖片路徑之間用|或者逗號,或者json 系列化來存儲:
?php
print_r($_FILES);//你可以打印一下它,看看它的結構
if(!empty($_FILES)){
foreach($_FILES['file']['name']?as?$k=$v){
?//$_FILES["file"]都變成$_FILES["file"][$k]操作進行操作吧
?if?($_FILES['file'][$k]['error']?==?0)?{
$filetype?=?array("jpg","JPG");
$arr?=?explode(".",?$_FILES["file"][$k]["name"]);
...//同樣的代碼
?}
}
}
?
form?name=""?action=""?method="post"?enctype="multipart/form-data"
input?type="file"?name="file[]"?/br?/
input?type="file"?name="file[]"?/br?/
input?type="file"?name="file[]"?/br?/
input?type="file"?name="file[]"?/br?/
input?type="file"?name="file[]"?/br?/
input?type="file"?name="file[]"?/br?/
input?type="submit"?name="a"?value="提交"?/
/form
分享題目:php上傳多文件數據庫 php多文件下載
URL標題:http://vcdvsql.cn/article44/hehhhe.html
成都網站建設公司_創新互聯,為您提供小程序開發、云服務器、網站策劃、微信小程序、全網營銷推廣、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯