Laravel使用自带的文件系统实现文件上传

这算是观看慕课网是的视频然后写的一篇笔记
视频源链接在此: https://www.imooc.com/video/13339

介绍:Laravel自己的文件系统
Laravel的文件系统是基于Frank de Jonge的Flysystem扩展包
提供了简单的接口,可以操作本地端空间,Amazon S3 、Rackspace Cloud Storage
可以非常简单的切换不同的保存方式,但仍使用相同的API操作

实际操作步骤如下:

1、首先在config下找到filesystems.php文件上传的配置文件
新建一个专门储存上传文件的磁盘
在disks下,增加一个本地的uploads磁盘
'uploads' => [
    'driver' => 'local',
    'root' => storage_path('app/uploads'),
    'url' => env('APP_URL').'/storage',
],
待会儿上传文件成功之后,文件会保存在storage/app/uploads下面

2、新建一个专门处理文件的Controller
项目根目录命令行运行:
php artisan make:controller FileController
在FileController中新建一个upload的方法
在routes/api.php中新增路由信息
路由前改为any表示可以接受任何类型的请求
Route::any('/biz/file/upload', 'FileController@upload');
3、在resources/views/下新建视图file/upload.blade.php
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">文件上传</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="POST" action="" enctype="multipart/form-data">
                        {{ csrf_field() }}

                        <div class="form-group" >
                            <label for="file" class="col-md-4 control-label">请选择文件</label>

                            <div class="col-md-6">
                                <input id="file" type="file" class="form-control" name="source" required>

                            </div>
                        </div>


                        <div class="form-group">
                            <div class="col-md-8 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    确认上传
                                </button>

                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
将login.blade.php的内容复制过来并删掉不需要的部分,修改文字内容,特别注意修改标黄的内容

4、然后在 FileController的upload方法中加载file.upload的视图
public  function upload(Request $request){

    return view('file.upload');
}
启动项目后,浏览器访问 http://localhost:8000/api/biz/file/upload ,显示如下视图

5、然后完善 FileController的upload方法
public  function upload(Request $request){

        if($request->isMethod('POST')){
//            var_dump($_FILES);
            $file = $request->file('source');
//            dd($file);
            //文件是否上传成功
            if($file->isValid()){
                //获取原文件名
                $originalName= $file->getClientOriginalName();
                //获取文件拓展名
                $ext= $file->getClientOriginalExtension();
                $type= $file->getClientMimeType();
                //获取文件临时绝对路径
                $realPath = $file->getRealPath();
                //自定义文件保存的名称
                $fileName = date('Y-m-d-H-i-s').'-'.uniqid().'.'.$ext;

               $bool=  \Storage::disk('uploads')->put($fileName,file_get_contents($realPath));

               var_dump($bool);
            }
            exit;
        }
        return view('file.upload');
    }
再次浏览器访问 http://localhost:8000/api/biz/file/upload
点击“选择文件”按钮,选择要上传的文件,再点击“确认上传”按钮
然后返回boolean true ,表示上传文件成功
storage/app/uploads可以看到上传的文件。

猜你喜欢

转载自blog.csdn.net/weixin_38682852/article/details/79759783
今日推荐