亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

文件上傳

1.前言

ThinkPHP 中內置的上傳只是將文件上傳到本地服務器,會在 runtime/storage 目錄下生成以當前日期為目錄名的子目錄,以微秒時間的 md5 值為文件名的文件,本小節主要介紹如何使用 ThinkPHP 內置的文件上傳功能,在實際項目中如果文件上傳比較多,一般會單獨存儲在第三方存儲平臺。

2.新建注冊路由

//文件上傳界面
Route::get('file','file/index');

//文件上傳
Route::post('upload','file/upload');

如下圖所示:
圖片描述

3.新建控制器和文件上傳界面方法

    /**
     * 文件上傳界面
     * @return string
     */
    public function index(){
        return View::fetch("file/index");
    }

如下圖所示:
圖片描述

Tips: 其中 View::fetch 表示調用模板引擎。

4.新建 html 模板

如下圖所示,在 view\file 目錄中新建 index.html 模板文件:
圖片描述

Tips: 模板文件可根據自己需求定義,css、js 文件可以按照圖中格式引入,從圖中可以看到注冊信息提交至 file/upload中。

5.定義文件上傳處理方法

     /**
     * 文件上傳接收
     * @return \think\response\Json
     */
    public function upload(){

        //接收文件
        $file = request()->file('file');
        halt($file);
        //將文件上傳到服務器文件目錄
        $filename = Filesystem::putFile('study',$file);

        return json("保存成功");
    }

文件上傳界面如下:
圖片描述

如下圖所示,是上傳之后的文件:
圖片描述

Tips: 文件上傳之后的文件名是經過編碼之后的名稱,一般具有唯一性,目的是為了防止重名文件被覆蓋的問題。

6.視頻演示

7.小結

本小節介紹了如何使用 ThinkPHP 內置的文件上傳方法,可以很方便的將文件上傳至指定的目錄,然后文件名是經過唯一性編碼處理的,目的是為了防止重名文件覆蓋造成文件丟失,需要注意的是實際項目中如果文件數量特比多可能造成服務器空間不足,導致服務器無法正常工作,這種情況建議使用第三方存儲服務器,主服務器只存儲文件的路徑即可。