Laravel 5.4 文件上传下载
一、上传
1.在public目录下新建文件夹:uploads
2.修改config/filesystems.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => public_path('uploads'),
],
3.html代码
<form action="{{URL('files/store')}}" method="POST" enctype="multipart/form-data" >
{!! csrf_field() !!}
<div class="form-group">
<input class="form-control" name="files" type="file">
<label>文件说明:</label>
</div>
<button type="sumbit" class="btn btn-success"><i class="fa fa-upload"></i>上传</button>
</form>
4.添加路由 web.php
Route::post('/files/store','FilesController@store');
5.控制器代码
头部注意引入
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Response;
保存代码 (数据库字段:file_id(主键自增) 、file_name(原文件名)、 file_url(返回的路径 详见 http://d.laravel-china.org/docs/5.4/filesystem)
public function store(Request $request)
{
if (!$request->hasFile('files')) {
return redirect()->back()->withErrors("上传文件为空或者上传文件过大");
}
$upload_files = $request->file();
if (empty($upload_files) || !is_array($upload_files)) {
return redirect()->back()->withErrors("上传失败");
}
$file = $request->file('files');
//判断文件上传过程中是否出错//
if (!$file->isValid()) {
exit('文件上传出错!');
} else {
//获取原文件名//
$originalName = $file->getClientOriginalName();
//扩展名//
$ext = $file->getClientOriginalExtension();
//文件类型//
$type = $file->getClientMimeType();
$allow_type = ['image/jpeg', 'application/pdf', 'image/jpg', 'application/octet-stream', 'image/png', 'image/gif', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
if (!in_array($type, $allow_type)) {
return redirect()->back()->withErrors("文件类型不允许");
}
//临时绝对路径
//$realPath = $file->getRealPath();
// $filename = date('Y-m-d-H-i-S') . '-' . uniqid() . '-' . $ext;
//加了一个files文件夹 在uploads下//
$path = $request->file('files')->store(
'files');
$input = $request->all();
$input['file_url'] = $path;
$input['file_name'] = $originalName;
$add = Files::create($input);
return redirect()->back()->withSuccess("$add->file_name 上传成功");
}
}
二、下载
html部分,传入file_id
<a href="{{URL("files/download/$file->file_id ")}}" class="btn btn-sm btn-success"><i class="fa fa-download"></i>下载</a>
控制器 注意引入Response
public function download($id)
{
$file = Files::findOrFail($id);
$out_filename = $file->file_name;
$exists = Storage::exists($file->file_url);
if ($exists) {
return response()->download(
realpath(base_path('public/uploads/')).'/'.$file->file_url,
$out_filename);
// return $contents;
}
}
480



被折叠的 条评论
为什么被折叠?



