ThinkPHP之文件上傳
阿新 • • 發佈:2017-08-13
實例化 md5 fadein .org function erro i++ 字符長度 需要
在項目其中。我們有的時候需要上傳圖片的功能。簡單的從面相過程的方法是相對較為復雜的,要一步一步的來。假設用框架的話,相對就簡單了很多,主要就是方法以及每個變量所代表的意義,然後就是一些註意的地方了。
首先,從視圖頁面說起,要先做好文件的上傳表單控件,這裏我就出現了一個錯誤,沒有加上文件的特有屬性而導致控制器取不到文件。例如以下所看到的一個簡單的界面:
<!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之文件上傳