一、需求
Laravel 5.3+(應該是) 之後,如果使用的驅動是 local
的話,如果保存文件不用 move
而是使用 store
,則會將 storage/app/
作爲文件上傳的基本路徑。
現在需要使用 store
存儲文件,但是存儲的路徑依舊想保存在 public/uploads
中,並且通過日期創建文件夾, 使用默認的文件名 hash 。
最終的結果應該是這樣子的:
二、配置修改
文件系統的配置文件是在 : 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
會得到包含文件夾的路徑,不然自己得去拼接文件夾,總是需要這個日期文件夾的操作