1. 程式人生 > >ThinkPHP之文件上傳

ThinkPHP之文件上傳

實例化 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之文件上傳