標籤:config string 取出 multipart 導致 設定 attribute lin www
在項目其中。我們有的時候需要上傳圖片的功能。簡單的從面相過程的方法是相對較為複雜的,要一步一步的來。假設用架構的話,相對就簡單了很多,主要就是方法以及每個變數所代表的意義,然後就是一些注意的地方了。
首先,從視圖頁面說起,要先做好檔案的上傳表單控制項,這裡我就出現了一個錯誤,沒有加上檔案的特有屬性而導致控制器取不到檔案。例如以下所看到的一個簡單的介面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>附件上傳</title></head><body> <form action="{$smarty.const.__SELF__}" enctype="multipart/form-data" method="post"> 上傳檔案(圖片)<input type="file" name="file_1"><br/> <input type="submit" value="上傳圖片"> <img src="{$img_url}"> </form></body></html>
在接下來,我們選擇了圖片或者其它的檔案,點擊上傳,就必需要控制器進行接收,直接有常量$_files檢查檔案的選擇是否存在,至於這個對象裡面都有什麼元素,可以用print_r的方法進行輸出查看。接下來就是執行個體化檔案上傳功能的upload類(這之前一定要配置類),用upload或者uploadOne(一個檔案)上傳檔案。可是我絕得上傳完不是目的。關鍵是要使用它。可以實現永久使用的除了檔案就是資料庫,由於圖片本身就是檔案,並且從資料安全性的方面來考慮,應當優先使用資料庫,可是我們不可能把整個圖片資料都儲存在資料庫。這裡就有一個辦法,也可以解決非常多難以解決的問題,比方資料分配等。這種話就簡單明了多了,把圖片的url儲存在資料庫。這樣資料量非常小,資源耗費非常少就行解決這個問題。可是。即便資料量小。我還是有一些低估了,我把資料設定成了64個位元組,可是這測試的時候有資料溢出,由於檔案名稱是經過MD5運算過的所以,會變長一些,所以我把字元長度設定成了128位。這樣問題就得到瞭解決,不多說了。還是直接上代碼把:
if(!empty($_POST)){ if(!empty($_FILES)){ // show_bug($_FILES); $config=array( ‘rootPath‘ => ‘./Public/‘, //儲存根路徑 ‘savePath‘ => ‘Upload/‘, //儲存路徑 ); $upload=new \Think\Upload($config); $z=$upload->uploadOne($_FILES[‘file_1‘]); if($z){ $info=D(‘pic‘); //取出檔案路徑以及名稱 $filename=IMG_UPLOAD_URL.$z[‘savepath‘].$z[‘savename‘]; // echo $filename; $info->name=$filename; // $info_save=$info->save(); $info_save=$info->add(); $res=$info->select(); if($info_save>=0){ $this->assign(‘img_url‘,$res[0][‘name‘]); // show_bug($info); echo $res[0][‘name‘]; $this->display(); } // $this->display(); }else{ echo "No"; show_bug($upload->getError()); } } }else{ $this->display(); } }
ThinkPHP之檔案上傳