前言
最近在做一个laravel框架下的文件上传功能,此篇文章写下我的主要代码,担心自己遗忘的同时也供大家参考。
文件系统配置文件
laravel框架下而打开config文件下filesystems.php文件,
在此文件中,此处新增以下uploads代码:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => public_path('file'),
'visibility' => 'public',
],
'uploads' => [
'driver' => 'local',
'root' => storage_path('app/uploads'),
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
];
‘root’ => storage_path(‘app/uploads’),
即为存储目录为storage下面APP中,在之后运行中,他会自动生成一个uploads目录,此目录与public目录平级。
转到控制器
在app/http/controllers/下新增StduentController,php文件
编写代码如下:
<?php
namespace App\Http\Controllers\Manager;
use Illuminate\Support\Facades\Storage;
use Validator;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Input;
use App\Http\Controllers\Controller;
use App\Service\SystemOperationLogService;
use App\Models\ControlBox;
use App\Models\ControlBoxLog;
use App\Models\Light;
use App\Models\LightDataLog;
use App\Models\Account;
use App\Models\ControlInstruction;
use App\Models\ControlBoxErrorAlarm;
use App\Models\ControlBoxElectricCurrent;
class StudentController extends Controller
{
//文件上传方法
public function upload(Request $request)
{
if ($request->isMethod('POST')) {
$file = $request->file('source');
//判断文件是否上传成功
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);
}
echo'上传成功 ';
exit;
}
return view('student.upload');
}
}
新建路由
在routes/web,php中新建路由
Route::any( 'upload', 'Manager\StudentController@upload');
Route::any( ‘upload’, ‘Manager\StudentController@upload’);
名称为upload,对于的为StudentController控制器下的upload方法。
新建视图
resources/views/新建student文件夹下面新建upload.blade.php视图文件
代码如下:
@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{{ $errors->has('password') ? ' has-error' : '' }}">
<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">
@if ($errors->has('password'))
<span class="help-block">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
<i class="fa fa-btn fa-sign-in"></i> 确认上传
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
最终上传界面
文件上传位置
最终说明一下学习视频地址:慕课网/轻松学会laraval高级篇