ThinkPHP之檔案上傳

來源:互聯網
上載者:User

標籤: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之檔案上傳

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.