一、需求

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