这里我的laravel版本是5.3,其他版本的路由文件名称及位置等会有所不同
(1)修改文件/config/filesystems.php,添加如下代码
'uploads' => [
'driver' => 'local',
'root' => storage_path('app/uploads'),
],
另外,在storage/app/下新建一个名为uploads的文件夹
(2)使用artisan命令新建一个控制器
php artisan make:controller IndexController
创建成功后在/app/Http/Controllers目录下生成一个IndexController.php文件
代码如下:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;
use Validator;
class TestController extends Controller
{
function index(Request $request) {
if($request->isMethod('post')){
$all = $request->all();
$rules = [
'upFile'=>'required',
];
$messages = [
'upFile.required'=>'请选择要上传的文件'
];
$validator = Validator::make($all,$rules,$messages);
if($validator->fails()){
return back()->withErrors($validator);
}
//获取上传文件的大小
$size = $request->file('upFile')->getSize();
//这里可根据配置文件的设置,做得更灵活一点
if($size > 2*1024*1024){
return back()->with('errors','上传文件不能超过2M');
}
//文件类型
$mimeType = $request->file('upFile')->getMimeType();
//这里根据自己的需求进行修改
if($mimeType != 'image/png'){
return back()->with('errors','只能上传png格式的图片');
}
//扩展文件名
$ext = $request->file('upFile')->getClientOriginalExtension();
//判断文件是否是通过HTTP POST上传的
$realPath = $request->file('upFile')->getRealPath();
if(!$realPath){
return back()->with('errors','非法操作');
}
//创建以当前日期命名的文件夹
$today = date('Y-m-d');
//storage_path().'/app/uploads/' 这里根据 /config/filesystems.php 文件里面的配置而定
//$dir = str_replace('\\','/',storage_path().'/app/uploads/'.$today);
$dir = storage_path().'/app/uploads/'.$today;
if(!is_dir($dir)){
mkdir($dir);
}
//上传文件
$filename = uniqid().'.'.$ext;//新文件名
if(Storage::disk('uploads')->put($today.'/'.$filename,file_get_contents($realPath))){
dd('上传成功');
}else{
dd('上传失败');
}
}else{
return view('test.index');
}
}
}
(3)routes/web.php文件里面添加路由
Route::match(['get','post'],'/index','TestController@index');
(4)在resources/views目录下新建test目录,并在该目录下创建index.blade.php模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
@if(count($errors)>0)
@if(is_object($errors))
@foreach($errors->all() as $error)
<p>{{$error}}</p>
@endforeach
@else
<p>{{$errors}}</p>
@endif
@endif
<form action="{{url('/index')}}" method="post" enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{csrf_token()}}" />
文件名:<input type="file" name="upFile" value="{{old('upFile')}}" /><br />
<input type="submit" value="上传" />
</form>
</body>
</html>