Hoe's Notes

Laravel:文件上传


Laravel当前版本 5.4.*

1.配置filesystems文件

文件系统的配置文件在 /config/filesystems.php 文件中,在disks数组中加入uploads磁盘空间。(不想自己配置也可直接用Laravel配置好的)

// 新建一个本地端uploads空间(目录) 用于存储上传的文件
    'uploads' => [
        'driver' => 'local',
        // 文件将上传到/storage/app/uploads目录
        'root' => storage_path('app/uploads'),
        // 文件将上传到/public/uploads目录 如果需要浏览器直接访问 请设置成这个
        //'root' => public_path('uploads'),
    ]

2. HTML模板代码:

<form action="" method="post" enctype="multipart/form-data" >   
    {{ csrf_field() }} <!-- 验证Token -->
    <input type="file" name="files">
    <button type="submit"> 提交 </button>
</form>

3.PHP代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class UploadController extends Controller
{
    public function upload(Request $request)
    {
        if ($request->isMethod('post')) {
            $file = $request->file('files');
            // 文件是否上传成功
            if ($file->isValid()) {
                // 获取文件相关信息
                $originalName = $file->getClientOriginalName(); // 文件原名
                $ext = $file->getClientOriginalExtension();     // 扩展名
                $realPath = $file->getRealPath();   //临时文件的绝对路径
                $type = $file->getClientMimeType();     // image/jpeg
                // 上传文件
                $filename = date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                // 使用我们新建的uploads本地存储空间(目录)
                $bool = Storage::disk('uploads')->put($filename, file_get_contents($realPath));
                var_dump($bool);
            }
        }
        return view('upload.upload');
    }
}