laravel中文件上传不需要借助第三方库,而是将上传当做一个http请求来看待
数据库:
首先确保自己的数据库里有可供写入的字段。
路由写法:
//文件上传
Route::match(['get','post'],'upload', 'Home\IndexController@upload');
Controller写法:
$request -> file(‘Type为file的input里的name名’)
getClientOriginalName()可以获取文件原始名称
getClientSize()可以获取文件大小,以字节为单位
getClientOriginalExtension()获取后缀名
//文件上传
public function upload(Request $request){
if(Input::method()=="POST"){
//上传
//判断文件是否正常
if($request -> hasFile('avatar') && $request -> file('avatar') -> isValid()){
//获取文件的原始名称
//dd($request -> file('avatar') -> getClientOriginalName());
//获取文件的大小
//dd($request -> file('avatar') -> getClientSize());
//文件的移动,为防止重名将时间戳md5加密后再加随机数生成不重复的用户名
$request -> file('avatar') -> move('./upload',md5(time() .rand(100000,999999)) . '.' . $request -> file('avatar') -> getClientOriginalExtension());
}
}else{
//展示视图
return view('Home/test/upload');
}
}
视图写法:
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<p>用户名: <input type="text" name="username"></p>
<p>密码: <input type="password" name="password"></p>
<p>年龄: <input type="text" name="age"></p>
<p>图片: <input type="file" name="avatar"></p>
{{csrf_field()}}
<input type="submit" value="提交" ><br/>
</form>
</body>
</html>
浏览器演示:
/pubic/upload文件夹下:
这就完成了基本的文件上传操作,如果想把上传的文件路径写进数据库,可以修改Controller
//文件上传
public function upload(Request $request){
if(Input::method()=="POST"){
//上传
//判断文件是否正常
if($request -> hasFile('avatar') && $request -> file('avatar') -> isValid()){
//获取文件的原始名称
//dd($request -> file('avatar') -> getClientOriginalName());
//获取文件的大小
//dd($request -> file('avatar') -> getClientSize());
//文件的移动,为防止重名将时间戳md5加密后再加随机数生成不重复的用户名
$path = md5(time() .rand(100000,999999)) . '.' . $request -> file('avatar') -> getClientOriginalExtension();
$request -> file('avatar') -> move('./upload',$path);
//获取全部数据
$data = $request ->all();
//将数据路名称路径添加进去
$data['avatar'] ='./upload/' . $path;
$result = User::create($data);
dd($result);
}
}else{
//展示视图
return view('Home/test/upload');
}
}
浏览器访问: