国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

ThinkPHP3.2文件上傳

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 07:21:41
文檔

ThinkPHP3.2文件上傳

ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進(jìn)行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp
推薦度:
導(dǎo)讀ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進(jìn)行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp

多文件上傳支持

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

改為

或者

兩種方式的多附件上傳系統(tǒng)的文件上傳類都可以自動識別。

上傳操作

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

  1. publicfunction upload(){
  2. $upload =new \Think\Upload();// 實(shí)例化上傳類
  3. $upload->maxSize =3145728;// 設(shè)置附件上傳大小
  4. $upload->exts = array('jpg','gif','png','jpeg');// 設(shè)置附件上傳類型
  5. $upload->rootPath ='./Uploads/';// 設(shè)置附件上傳根目錄
  6. $upload->savePath ='';// 設(shè)置附件上傳(子)目錄
  7. // 上傳文件
  8. $info = $upload->upload();
  9. if(!$info){// 上傳錯誤提示錯誤信息
  10. $this->error($upload->getError());
  11. }else{// 上傳成功
  12. $this->success('上傳成功!');
  13. }
  14. }

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

上傳參數(shù)

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

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

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

實(shí)例化傳入

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

  1. $config = array(
  2. 'maxSize'=>3145728,
  3. 'rootPath'=>'./Uploads/',
  4. 'savePath'=>'',
  5. 'saveName'=> array('uniqid',''),
  6. 'exts'=> array('jpg','gif','png','jpeg'),
  7. 'autoSub'=>true,
  8. 'subName'=> array('date','Ymd'),
  9. );
  10. $upload =new \Think\Upload($config);// 實(shí)例化上傳類

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

動態(tài)賦值

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

  1. $upload =new \Think\Upload();// 實(shí)例化上傳類
  2. $upload->maxSize =3145728;
  3. $upload->rootPath ='./Uploads/';
  4. $upload->savePath ='';
  5. $upload->saveName = array('uniqid','');
  6. $upload->exts = array('jpg','gif','png','jpeg');
  7. $upload->autoSub =true;
  8. $upload->subName = array('date','Ymd');

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

上傳文件信息

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

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

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

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

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

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

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

單文件上傳

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

  1. publicfunction upload(){
  2. $upload =new \Think\Upload();// 實(shí)例化上傳類
  3. $upload->maxSize =3145728;// 設(shè)置附件上傳大小
  4. $upload->exts = array('jpg','gif','png','jpeg');// 設(shè)置附件上傳類型
  5. $upload->rootPath ='./Uploads/';// 設(shè)置附件上傳根目錄
  6. // 上傳單個文件
  7. $info = $upload->uploadOne($_FILES['photo1']);
  8. if(!$info){// 上傳錯誤提示錯誤信息
  9. $this->error($upload->getError());
  10. }else{// 上傳成功 獲取上傳文件信息
  11. echo $info['savepath'].$info['savename'];
  12. }
  13. }

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

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

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

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

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

  1. // 采用時間戳命名
  2. $upload->saveName ='time';
  3. // 采用GUID序列命名
  4. $upload->saveName ='com_create_guid';

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

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

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

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

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

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

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

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

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

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

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

  1. $upload->saveName ='ThinkPHP';

三、保持上傳文件名不變

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

  1. $upload->saveName ='';

一般來說不建議保持不變,因?yàn)闀?dǎo)致相同的文件名上傳后被覆蓋的情況。

子目錄保存

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

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

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

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

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

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

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

上傳驅(qū)動

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

  1. 'FILE_UPLOAD_TYPE'=>'Ftp',
  2. 'UPLOAD_TYPE_CONFIG'=> array(
  3. 'host'=>'192.168.1.200',//服務(wù)器
  4. 'port'=>21,//端口
  5. 'timeout'=>90,//超時時間
  6. 'username'=>'ftp_user',//用戶名
  7. 'password'=>'ftp_pwd',//密碼 ),

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

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

  1. $config = array(
  2. 'maxSize'=3145728,
  3. 'rootPath'='./Uploads/',
  4. 'savePath'='',
  5. 'saveName'= array('uniqid',''),
  6. 'exts'= array('jpg','gif','png','jpeg'),
  7. 'autoSub'=true,
  8. 'subName'= array('date','Ymd'),
  9. );
  10. $ftpConfig = array(
  11. 'host'=>'192.168.1.200',//服務(wù)器
  12. 'port'=>21,//端口
  13. 'timeout'=>90,//超時時間
  14. 'username'=>'ftp_user',//用戶名
  15. 'password'=>'ftp_pwd',//密碼 );
  16. $upload =new \Think\Upload($config,'Ftp',$ftpConfig);// 實(shí)例化上傳類

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

ThinkPHP3.2文件上傳

ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進(jìn)行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp
推薦度:
標(biāo)簽: 文件 上傳 上傳文件
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 伊人情人综合成人久久网小说 | 久久久久国产一级毛片高清版 | 亚洲qvod图片区电影 | 国产欧美日韩视频 | 国产成人综合久久精品下载 | 中文字幕一区二区在线观看 | 亚洲伊人精品 | xx日韩| 亚洲成人99 | 亚洲欧美日韩第一页 | 亚洲欧美国产精品 | 欧美成人精品一级高清片 | 制服丝袜先锋影音 | 亚洲页码| 日本三级一区二区三区 | 亚洲自拍另类 | 国产播放器一区 | 亚洲 欧美 日韩在线一区 | 亚欧乱亚欧乱色视频免费 | 国产 欧美 日韩 在线 | www.日韩视频 | 国产欧美日韩综合精品一区二区 | 日韩网| 日韩专区亚洲综合久久 | 国产精品亚洲四区在线观看 | 中文字幕va一区二区三区 | 最新色视频 | 国产手机在线国内精品 | 精品一区二区三区四区电影 | 成人毛片一区二区三区 | 欧美极品欧美日韩 | 91久久综合九色综合欧美98 | 国产精品成人一区二区三区 | 精品国产一区二区三区麻豆小说 | 亚洲色图 第一页 | 欧美日韩国产亚洲一区二区三区 | 福利片一区二区 | 免费一看一级毛片全播放 | 大香伊人久久 | 亚洲第一区在线观看 | 国产对白在线播放九色 |