成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

使用TP3.2.3框架怎么實(shí)現(xiàn)一個(gè)文件上傳功能-創(chuàng)新互聯(lián)

這篇文章給大家介紹使用TP3.2.3框架怎么實(shí)現(xiàn)一個(gè)文件上傳功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)公司是一家以成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為服務(wù)器托管等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。

上傳表單


在ThinkPHP中使用上傳功能無(wú)需進(jìn)行特別處理。例如,下面是一個(gè)帶有附件上傳的表單提交:

<form action="__URL__/upload" enctype="multipart/form-data" method="post" >
<input type="text" name="name" />
<input type="file" name="photo" />
<input type="submit" value="提交" >
</form>

注意,要使用上傳功能 你的表單需要設(shè)置 enctype="multipart/form-data"

多文件上傳支持

如果需要使用多個(gè)文件上傳,只需要修改表單,把

<input type='file' name='photo'>

改為

<input type='file' name='photo1'>
<input type='file' name='photo2'>
<input type='file' name='photo3'>

或者

<input type='file' name='photo[]'>
<input type='file' name='photo[]'>
<input type='file' name='photo[]'>

兩種方式的多附件上傳系統(tǒng)的文件上傳類(lèi)都可以自動(dòng)識(shí)別。

上傳操作

ThinkPHP文件上傳操作使用Think\Upload類(lèi),假設(shè)前面的表單提交到當(dāng)前控制器的upload方法,我們來(lái)看下upload方法的實(shí)現(xiàn)代碼:

public function upload(){
$upload = new \Think\Upload();// 實(shí)例化上傳類(lèi)
$upload->maxSize = 3145728 ;// 設(shè)置附件上傳大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 設(shè)置附件上傳類(lèi)型
$upload->rootPath = './Uploads/'; // 設(shè)置附件上傳根目錄
$upload->savePath = ''; // 設(shè)置附件上傳(子)目錄
// 上傳文件
$info = $upload->upload();
if(!$info) {// 上傳錯(cuò)誤提示錯(cuò)誤信息
$this->error($upload->getError());
}else{// 上傳成功
$this->success('上傳成功!');
}
}

上傳類(lèi)對(duì)圖片文件的上傳安全做了支持,如果企圖上傳非法的圖像文件,系統(tǒng)會(huì)提示 非法圖像文件。 為了更好的使用上傳功能,建議你的服務(wù)器開(kāi)啟finfo模塊支持

上傳參數(shù)

在上傳操作之前,我們可以對(duì)上傳的屬性進(jìn)行一些設(shè)置,Upload類(lèi)支持的屬性設(shè)置包括:

屬性描述
maxSize文件上傳的較大文件大小(以字節(jié)為單位),0為不限大小
rootPath文件上傳保存的根路徑
savePath文件上傳的保存路徑(相對(duì)于根路徑)
saveName上傳文件的保存規(guī)則,支持?jǐn)?shù)組和字符串方式定義
saveExt上傳文件的保存后綴,不設(shè)置的話使用原文件后綴
replace存在同名文件是否是覆蓋,默認(rèn)為false
exts允許上傳的文件后綴(留空為不限制),使用數(shù)組或者逗號(hào)分隔的字符串設(shè)置,默認(rèn)為空
mimes允許上傳的文件類(lèi)型(留空為不限制),使用數(shù)組或者逗號(hào)分隔的字符串設(shè)置,默認(rèn)為空
autoSub自動(dòng)使用子目錄保存上傳文件 默認(rèn)為true
subName子目錄創(chuàng)建方式,采用數(shù)組或者字符串方式定義
hash是否生成文件的hash編碼 默認(rèn)為true
callback檢測(cè)文件是否存在回調(diào),如果存在返回文件信息數(shù)組

上面的屬性可以通過(guò)兩種方式傳入:

實(shí)例化傳入

我們可以在實(shí)例化的時(shí)候直接傳入?yún)?shù)數(shù)組,例如:

$config = array(
'maxSize' => 3145728,
'rootPath' => './Uploads/',
'savePath' => '',
'saveName' => array('uniqid',''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date','Ymd'),
);
$upload = new \Think\Upload($config);// 實(shí)例化上傳類(lèi)

關(guān)于saveName和subName的使用后面我們會(huì)有詳細(xì)的描述。

動(dòng)態(tài)賦值

支持在實(shí)例化后動(dòng)態(tài)賦值上傳參數(shù),例如:

$upload = new \Think\Upload();// 實(shí)例化上傳類(lèi)
$upload->maxSize = 3145728;
$upload->rootPath = './Uploads/';
$upload->savePath = '';
$upload->saveName = array('uniqid','');
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');
$upload->autoSub = true;
$upload->subName = array('date','Ymd');

上面的設(shè)置和實(shí)例化傳入的效果是一致的。

上傳文件信息

設(shè)置好上傳的參數(shù)后,就可以調(diào)用Think\Upload類(lèi)的upload方法進(jìn)行附件上傳,如果失敗,返回false,并且用getError方法獲取錯(cuò)誤提示信息;如果上傳成功,就返回成功上傳的文件信息數(shù)組。

$upload = new \Think\Upload();// 實(shí)例化上傳類(lèi)
$upload->maxSize = 3145728 ;// 設(shè)置附件上傳大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 設(shè)置附件上傳類(lèi)型
$upload->rootPath = './Uploads/'; // 設(shè)置附件上傳根目錄
$upload->savePath = ''; // 設(shè)置附件上傳(子)目錄
// 上傳文件
$info = $upload->upload();
if(!$info) {// 上傳錯(cuò)誤提示錯(cuò)誤信息
$this->error($upload->getError());
}else{// 上傳成功 獲取上傳文件信息
foreach($info as $file){
echo $file['savepath'].$file['savename'];
}
}

每個(gè)文件信息又是一個(gè)記錄了下面信息的數(shù)組,包括:

屬性描述
key附件上傳的表單名稱(chēng)
savepath上傳文件的保存路徑
name上傳文件的原始名稱(chēng)
savename上傳文件的保存名稱(chēng)
size上傳文件的大小
type上傳文件的MIME類(lèi)型
ext上傳文件的后綴類(lèi)型
md5上傳文件的md5哈希驗(yàn)證字符串 僅當(dāng)hash設(shè)置開(kāi)啟后有效
sha1上傳文件的sha1哈希驗(yàn)證字符串 僅當(dāng)hash設(shè)置開(kāi)啟后有效

文件上傳成功后,就可以使用這些文件信息來(lái)進(jìn)行其他的數(shù)據(jù)操作,例如保存到當(dāng)前數(shù)據(jù)表或者單獨(dú)的附件數(shù)據(jù)表。

例如,下面表示把上傳信息保存到數(shù)據(jù)表的字段:

$model = M('Photo');
// 取得成功上傳的文件信息
$info = $upload->upload();
// 保存當(dāng)前數(shù)據(jù)對(duì)象
$data['photo'] = $info[0]['savename'];
$data['create_time'] = NOW_TIME;
$model->add($data);

單文件上傳

upload方法支持多文件上傳,有時(shí)候,我們只需要上傳一個(gè)文件,就可以使用Upload類(lèi)提供的uploadOne方法上傳單個(gè)文件,例如:

public function upload(){
$upload = new \Think\Upload();// 實(shí)例化上傳類(lèi)
$upload->maxSize = 3145728 ;// 設(shè)置附件上傳大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 設(shè)置附件上傳類(lèi)型
$upload->rootPath = './Uploads/'; // 設(shè)置附件上傳根目錄
// 上傳單個(gè)文件
$info = $upload->uploadOne($_FILES['photo1']);
if(!$info) {// 上傳錯(cuò)誤提示錯(cuò)誤信息
$this->error($upload->getError());
}else{// 上傳成功 獲取上傳文件信息
echo $info['savepath'].$info['savename'];
}
}

uploadOne方法上傳成功后返回的文件信息和upload方法的區(qū)別是只有單個(gè)文件信息的一維數(shù)組。

上傳文件的命名規(guī)則

上傳文件的命名規(guī)則(saveName)用于確保文件不會(huì)產(chǎn)生沖突或者覆蓋的情況。命名規(guī)則的定義可以根據(jù)你的業(yè)務(wù)邏輯來(lái)調(diào)整,不是固定的。例如,如果你采用時(shí)間戳的方式來(lái)定義命名規(guī)范,那么在同時(shí)上傳多個(gè)文件的時(shí)候可能產(chǎn)生沖突(因?yàn)橥幻雰?nèi)可以上傳多個(gè)文件),因此你需要根據(jù)你的業(yè)務(wù)需求來(lái)設(shè)置合適的上傳命名規(guī)則。這里順便來(lái)說(shuō)下saveName參數(shù)的具體用法。

一、采用函數(shù)方式

如果傳入的字符串是一個(gè)函數(shù)名,那么表示采用函數(shù)動(dòng)態(tài)生成上傳文件名(不包括文件后綴),例如:

// 采用時(shí)間戳命名
$upload->saveName = 'time';
// 采用GUID序列命名
$upload->saveName = 'com_create_guid';

也可以采用用戶自定義函數(shù)

// 采用自定義函數(shù)命名
$upload->saveName = 'myfun';

默認(rèn)的命名規(guī)則設(shè)置是采用uniqid函數(shù)生成一個(gè)的字符串序列。

saveName的值支持?jǐn)?shù)組和字符串兩種方式,如果是只有一個(gè)參數(shù)或者沒(méi)有參數(shù)的函數(shù),直接使用字符串設(shè)置即可,如果需要傳入額外的參數(shù),可以使用數(shù)組方式,例如:

// 采用date函數(shù)生成命名規(guī)則 傳入Y-m-d參數(shù)
$upload->saveName = array('date','Y-m-d');
// 如果有多個(gè)參數(shù)需要傳入的話 可以使用數(shù)組
$upload->saveName = array('myFun',array('__FILE__','val1','val2'));

如果需要使用上傳的原始文件名,可以采用__FILE__傳入,所以上面的定義規(guī)則,最終的結(jié)果是 myFun('上傳文件名','val1','val2')執(zhí)行的結(jié)果。

二、直接設(shè)置上傳文件名

如果傳入的參數(shù)不是一個(gè)函數(shù)名,那么就會(huì)直接當(dāng)做是上傳文件名,例如:

$upload->saveName = time().'_'.mt_rand();

表示上傳的文件命名采用時(shí)間戳加一個(gè)隨機(jī)數(shù)的組合字符串方式。

當(dāng)然,如果覺(jué)得有必要,你還可以固定設(shè)置一個(gè)上傳文件的命名規(guī)則,用于固定保存某個(gè)上傳文件。

$upload->saveName = 'ThinkPHP';

三、保持上傳文件名不變

如果你想保持上傳的文件名不變,那么只需要設(shè)置命名規(guī)范為空即可,例如:

$upload->saveName = '';

一般來(lái)說(shuō)不建議保持不變,因?yàn)闀?huì)導(dǎo)致相同的文件名上傳后被覆蓋的情況。

子目錄保存

saveName只是用于設(shè)置文件的保存規(guī)則,不涉及到目錄,如果希望對(duì)上傳的文件分子目錄保存,可以設(shè)置autoSub和subName參數(shù)來(lái)完成,例如:

// 開(kāi)啟子目錄保存 并以日期(格式為Ymd)為子目錄
$upload->autoSub = true;
$upload->subName = array('date','Ymd');

可以使用自定義函數(shù)來(lái)保存,例如:

// 開(kāi)啟子目錄保存 并調(diào)用自定義函數(shù)get_user_id生成子目錄
$upload->autoSub = true;
$upload->subName = 'get_user_id';

和saveName參數(shù)一樣,subName的定義可以采用數(shù)組和字符串的方式。

注意:如果get_user_id函數(shù)未定義的話,會(huì)直接以get_user_id字符串作為子目錄的名稱(chēng)保存。

子目錄保存和文件命名規(guī)則可以結(jié)合使用。

上傳驅(qū)動(dòng)

上傳類(lèi)可以支持不同的環(huán)境,通過(guò)相應(yīng)的上傳驅(qū)動(dòng)來(lái)解決,默認(rèn)情況下使用本地(Local)上傳驅(qū)動(dòng),當(dāng)然,你還可以設(shè)置當(dāng)前默認(rèn)的上傳驅(qū)動(dòng)類(lèi)型,例如:

'FILE_UPLOAD_TYPE' => 'Ftp',
'UPLOAD_TYPE_CONFIG' => array(
'host' => '192.168.1.200', //服務(wù)器
'port' => 21, //端口
'timeout' => 90, //超時(shí)時(shí)間
'username' => 'ftp_user', //用戶名
'password' => 'ftp_pwd', //密碼 ),

表示當(dāng)前使用Ftp作為上傳類(lèi)的驅(qū)動(dòng),上傳的文件會(huì)通過(guò)FTP傳到指定的遠(yuǎn)程服務(wù)器。

也可以在實(shí)例化上傳類(lèi)的時(shí)候指定,例如:

$config = array(
'maxSize' = 3145728,
'rootPath' = './Uploads/',
'savePath' = '',
'saveName' = array('uniqid',''),
'exts' = array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' = true,
'subName' = array('date','Ymd'),
);
$ftpConfig = array(
'host' => '192.168.1.200', //服務(wù)器
'port' => 21, //端口
'timeout' => 90, //超時(shí)時(shí)間
'username' => 'ftp_user', //用戶名
'password' => 'ftp_pwd', //密碼 );
$upload = new \Think\Upload($config,'Ftp',$ftpConfig);// 實(shí)例化上傳類(lèi)

關(guān)于使用TP3.2.3框架怎么實(shí)現(xiàn)一個(gè)文件上傳功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文題目:使用TP3.2.3框架怎么實(shí)現(xiàn)一個(gè)文件上傳功能-創(chuàng)新互聯(lián)
文章位置:http://jinyejixie.com/article26/egcjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、用戶體驗(yàn)、全網(wǎng)營(yíng)銷(xiāo)推廣、電子商務(wù)、軟件開(kāi)發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
东港市| 武安市| 大安市| 腾冲县| 双牌县| 蓬安县| 黄平县| 永城市| 丹东市| 柯坪县| 神农架林区| 崇左市| 青岛市| 拉萨市| 莎车县| 沂源县| 岑溪市| 霸州市| 蓝山县| 兴义市| 三都| 中江县| 长沙市| 青川县| 新化县| 江门市| 咸宁市| 米林县| 玉门市| 温泉县| 仁怀市| 孝感市| 天柱县| 金寨县| 方山县| 吐鲁番市| 鞍山市| 福安市| 丰原市| 武威市| 象山县|