一、需求
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
会得到包含文件夹的路径,不然自己得去拼接文件夹,总是需要这个日期文件夹的操作