Laravel 5.5 文件上傳使用 store 到 public 目錄

一、需求

Laravel 5.3+(應該是) 之後,如果使用的驅動是 local 的話,如果保存文件不用 move 而是使用 store,則會將 storage/app/ 作爲文件上傳的基本路徑。

現在需要使用 store 存儲文件,但是存儲的路徑依舊想保存在 public/uploads 中,並且通過日期創建文件夾, 使用默認的文件名 hash 。

最終的結果應該是這樣子的:

1.jpg

二、配置修改

文件系統的配置文件是在 : config/filesystems.php 中

主要修改的是 disks > local 的配置,更改 root ,使用了 public_path() 輔助函數:

'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => public_path('uploads'),
        ],
    // 這裏省略了其他的配置
]

三、文件上傳的 php 代碼

簡單的一個示例代碼,主要說明如何根據日期創建文件夾:

下面的代碼中,我重命名了文件名

    public function upload(Request $request){
        if(!$request->hasFile('img')){
            $request->session()->flash('error_msg','文件不存在');
            return back();
        }
        $img = $request->file('files');
        // 獲取後綴名
        $ext = $img->extension();
        // 新文件名
        $saveName =time().rand().".".$ext;
        // 存儲文件 已經不使用 move 這種方式
        // $img->move('./uploads/'.date('Ymd'),$saveName);
        // 使用 store 存儲文件
        $path = $img->store(date('Ymd'));
        return back()->withInput(['url'=>'uploads/'.$path]);
    }

上面代碼通過 store(date('Ymd')) 會自動的創建日期文件夾,之所以在這裏生成,而不是在配置文件中生成,主要原因是:

在 store 中設置 date 的方式來創建文件夾,$path 會得到包含文件夾的路徑,不然自己得去拼接文件夾,總是需要這個日期文件夾的操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章