上傳控件改成數(shù)組就可以了。然后循環(huán)執(zhí)行你已經(jīng)寫完的這段
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、十堰鄖陽網(wǎng)站維護(hù)、網(wǎng)站推廣。
input type='file' name='files[]'
然后$_FILE就變成了一個數(shù)組,循環(huán)執(zhí)行上面代碼即可。
你要實(shí)現(xiàn)的這個功能,重點(diǎn)已經(jīng)不是php或者mysql了。上傳這個東西,不管你是單個上傳還是批量上傳,服務(wù)器端的差別是不大的。主要是,你要實(shí)現(xiàn)的“流程先是讀出本地某文件夾下文件的列表再勾選想要上傳的文件,一次性上傳”這個功能,目前來看,是要用Flash/Flex來寫了。
1.首先還是查看環(huán)境是否支持超大容量上傳的支持,500M以上的文件通常為視頻文件;
2.即然他要上傳500M以上的文件,估計服務(wù)器性能必定非同凡想,所以暫可不考慮服務(wù)器硬件配置問題,但一定要考慮到網(wǎng)速問題,建議1000M以上出入速率,如少于這個數(shù),你可以放棄這個方案了;
3.前面硬件都過關(guān)了,但程序也要加強(qiáng)了,一下上傳500M是哪種語言都不能實(shí)現(xiàn)的,唯一解決方案,文件切割,如迅雷下載原理一樣(采用續(xù)點(diǎn)上傳),分成若干小塊,然后全部上傳完畢以后,再進(jìn)行文件合成。
4.至于PHP的文件切割,切割后上傳,以及文件合并,此類代碼網(wǎng)上有許多,樓主可查詢并選擇適合你的代碼,實(shí)現(xiàn)你的功能!
php實(shí)現(xiàn)上傳圖片保存到數(shù)據(jù)庫的方法。具體分析如下:
php 上傳圖片,一般都使用move_uploaded_file方法保存在服務(wù)器上。但如果一個網(wǎng)站有多臺服務(wù)器,就需要把圖片發(fā)布到所有的服務(wù)器上才能正常使用(使用圖片服務(wù)器的除外)
如果把圖片數(shù)據(jù)保存到數(shù)據(jù)庫中,多臺服務(wù)器間可以實(shí)現(xiàn)文件共享,節(jié)省空間。
首先圖片文件是二進(jìn)制數(shù)據(jù),所以需要把二進(jìn)制數(shù)據(jù)保存在mysql數(shù)據(jù)庫。
mysql數(shù)據(jù)庫提供了BLOB類型用于存儲大量數(shù)據(jù),BLOB是一個二進(jìn)制對象,能容納不同大小的數(shù)據(jù)。
BLOB類型有以下四種,除存儲的最大信息量不同外,其他都是一樣的。可根據(jù)需要使用不同的類型。
TinyBlob?????? 最大 255B
Blob????????????? 最大 65K
MediumBlob? 最大 16M
LongBlob????? 最大 4G
數(shù)據(jù)表photo,用于保存圖片數(shù)據(jù),結(jié)構(gòu)如下:
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??
//?連接數(shù)據(jù)庫??
$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??
}??
?
程序運(yùn)行截圖和數(shù)據(jù)庫截圖:
獲取路徑下的所有圖片文件名,寫入數(shù)據(jù)庫或是某個變量,在別的頁面調(diào)用程序上傳,再從別的頁面讀出來就行了。
以下是示例代碼:
?php
function upload($fileName,$filePath)
{
//判斷該文件是否是用戶根據(jù)POST方式提交到服務(wù)器的上傳文件
foreach($_FILES[$fileName]['tmp_name'] as $k=$v)
{
if($_FILES[$fileName]['name'][$k]!="")
{
$result=check($_FILES[$fileName]['size'][$k],$_FILES[$fileName]['type'][$k],$_FILES[$fileName]['name'][$k]);
if($result['error']==1)
{
echo $result['msg']."br";
echo "出錯文件:".$result['name']."br";
}
else
{
$arrTT=explode(".",$_FILES[$fileName]['name'][$k]);
$extName=$arrTT[count($arrTT)-1];
$NewName=sha1(microtime()).".".$extName;
if(move_uploaded_file($v,$filePath.$NewName));
$arrWW[]=$NewName;
}
}
}
return $arrWW;
}
function check($size,$types,$name)
{
if($size=5242880)
{
$result['msg']='文件過大!';
$result['error']=1;
$result['name']=$name;
}
$arrType=array('image/pjpeg','image/gif','image/x-png','audio/mp3','application/msword','application/vnd.ms_excel','application/octet-stream','application/vnd.ms-powerpoint');
if(!in_array($types,$arrType))
{
$result['msg']='文件類型不匹配!';
$result['error']=1;
$result['name']=$name;
}
return $result;
}
?
?php
class FileAction extends Action {
public function Index()
{
//print_r(__URL__);
$file = M('file');
$list = $file-select();
$this-assign('filelist',$list);
$this-display();
}
public function upload()
{
//文件上傳的地址上傳給它,并且上傳完成后返回一個信息,讓其寫入數(shù)據(jù)庫
//如果$_FILES為空的畫,我就讓action給出一個錯誤提示,告訴用戶必須選擇上傳文件。如果有上傳文件,則調(diào)用up方法
//$_FILES = $this-_post('file');
//print_r($_FILES);
if (empty($_FILES)) {
$this-error('必須選擇上傳文件');
}else {
$a = $this-Up();
//print_r($a);
if (isset($a)) {
//寫入數(shù)據(jù)庫方法
if($this-c($a)) {
$this-success('上傳成功');
}else {
$this-error('寫入數(shù)據(jù)庫失敗');
}
}else {
$this-error('上傳文件有異常請與系統(tǒng)管理員聯(lián)系');
}
}
}
private function c($data)
{
//print_r($data);
$file=M('file');
$num = '0';
for($i = 0; $i count($data)-1; $i++) {
$data['filename']=$data[$i]['savename'];
if( $file-data($data)-add())
{
$num++;
}
}
if($num==count($data)-1)
{
return true;
}else {
return false;
}
}
// private function c($data)
// {
// $file = M('file');
// $data['filename'] = $data[0]['savename'];
// if ($file-data($data)-add()) {
// return true;
// }else {
// return false;
// }
// }
//在這個方法當(dāng)中,完成與thinkphp相關(guān)的,文件上傳類的調(diào)用
private function Up()
{
//echo '模擬上傳';
//基本上傳功能
//批量上傳功能
//生成圖片縮略圖
//自定義參數(shù)上傳
//上傳檢測(大小,后綴,mime類型)
//支持覆蓋方式上傳
//上傳類型,附件大小,上傳路徑定義
//支持hash或者日期子目錄保存上傳文件
//上傳圖片的安全性檢測
//對上傳文件的hash檢測
//上傳文件名自定義規(guī)范
import('@.ORG.UploadFile');
import('@.ORG.Image');
$upload = new UploadFile();
$upload-maxSize = '1000000'; //指上傳文件大小,默認(rèn)為-1,不限制大?。╞ytes)
$upload-savePath = './Public/'; //上傳保存到什么地方?路徑建議保存到入口文件平級或平級目錄的子目錄
$upload-saveRule = 'uniqid'; //上傳文件的文件名保存規(guī)則 time uniqid(默認(rèn)) com_create_guid
$upload-hashType = 'md5_file';
$upload-autoCheck = true; //是否自動檢測附件 默認(rèn)true
$upload-uploadReplace = true; //如果存在同名文件是否進(jìn)行覆蓋
$upload-allowExts = array('jpg','jpeg','png','gif'); //允許上傳的文件后綴
$upload-allowPath = array('image/png','image/jpg','image/pjpeg','image/gif','image/jpeg'); //檢測mime類型
$upload-thumb = true; // 是否開啟圖片文件縮略
$upload-thumbMaxWidth = '300,500';//縮略圖最大寬度
$upload-thumbMaxHeight = '200,400';//最大高度
$upload-thumbPrefix = 's-,m-';//縮略圖文件前綴
//$upload-thumbSuffix = '_s,_m';//文件后綴
//$upload-thumbPath = '';//如果留空直接上傳至
//$upload-thumbFile 在數(shù)據(jù)庫中也存一個文件名即可
$upload-thumbRemoveOrigin = 1; //如果生成縮略圖,是否刪除原圖
//$upload-autoSub 是否使用子目錄進(jìn)行保存上傳文件
//$upload-subType='' 子目錄創(chuàng)建方式默認(rèn)為hash 也可以為date
//$upload-dateFormat 子目錄方式date的指定日期格式
//$upload-hashLevle
//upload() 如果上傳成功返回true,失敗返回false
if ($upload-upload()) {
$info = $upload-getUploadFileInfo();
return $info;
}else {
//是專門來獲取上傳的錯誤信息的
$this-error($upload-getErrorMsg());
}
}
}
?
新聞標(biāo)題:php批量上傳文件數(shù)據(jù)庫,php多文件上傳
文章URL:http://chinadenli.net/article26/heidjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)、ChatGPT、網(wǎng)站收錄、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)