首先先在config里面找到filesystem上传管理文件,在disks里面添加新的路径
php里面安装fileinfo拓展插件
这里添加了一个upload类来处理图片上传路径
还添加了一个audio类来处理视频上传路径
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
// 再配置文件创建一个上传目录
'upload' => [
'driver' => 'local',
'root' => public_path('/uploads'),// public_path 就是public的路径
],
//也可以写成下面这样的内容
'uploads' => [
'driver' => 'local',
'root' => 'uploads',//上传地址
],
//视频上传,类似图片上传,这里只是定义个目录地址
'audio' => [
'driver' => 'local',
'root' => public_path('/videos'),// public_path 就是public的路径
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
'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'),
],
],
创建控制器
php artisan make:controller UploadController
编辑控制器内容
class UploadController extends Controller
{
/**
* 普通图片上传的方法
*/
public function upload(Request $request){
//需要注意,利用laravel的图片上传方法!注意服务器PHP版本里的fileinfo的扩展是否打开
//获取前台图片信息
//dd($request->all());
$file = $request->file('file');
//判断上传的图片是否合法
if ($file->isValid()){
//如果合法就处理
//ymd是时间名,upload是文件
//第一个参数,传递的是忽略默认图片上传地址的路径之后,我们自己希望定义的文件上传的文件夹名称,不能带上文件的名称, 因为系统会自动生成唯一的文件名
//第二个参数是相对于当前项目来说的存储图片的磁盘名称,如果不传递第二个参数,会去filesystems.php文件中找default,如果你传递了第二个参数,会去配置文件中的disks中找第二个参数值的名称,然后将图片上传至对应的位置
$path = $file->store(date('ymd'),'upload');
//上传完成之后,需要给固定的返回值
return ['file' => asset('/uploadImages/'.$path),'code'=>0];
}
}
//layui插件的上传方法
public function bianji(Request $request){
//获取前台请求过来的数据
$file = $request->file('file');
//判断是否合法
if ($file->isValid()){
//如果合法就继续执行上传
$path = $file->store(date('ymd'),'upload');
$data = asset('/uploadImages/'.$path);//文件地址
//上传完毕,找到手册里面对应的返回值
return [
"success" => true,
"msg" => "图片上传成功",
"data" => array("src"=> $data),
"code" => 0,
];
}
}
//视频上传的功能
public function videos(Request $request)
{
//获取前台请求过来的数据
$file = $request->file('file');
if ($file->isValid()) {
# 扩展名
$ext = $file->getClientOriginalExtension();
# 临时绝对路径
$realPath = '/videos/'.date('Ymd');
# public目录下
$path = public_path($realPath);
# 判断该目录是否存在,如果不存在就创建
if (!file_exists($path)){
\File::makeDirectory($path, 0777, true, true);
}
# 自定义文件名
$fileName = date('Ymd').'video'.str_random(20).'.'.$ext;
# 将对应文件保存到绝对路径里面
$file->move($path,$fileName);
# 将相对的地址返回到页面中去
$name = asset($realPath.'/'.$fileName);
//上传完成之后,需要给固定的返回值
return ['file' => $name,'code'=>0];
}
}
}
最后添加路由,控制上传
//这里使用any路由,因为不确定上传图片的方式具体是GET还是POST
Route::any('admin/up','UploadController@upload');
//编辑器上传图片处理路由
Route::any('admin/upload','UploadController@bianji');
//编辑器上传视频处理路由
Route::any('/video-int','UploadController@videos');
layui插件写法
<meta name="csrf-token" content="{
{ csrf_token() }}">
<link rel="stylesheet" href="{
{__LAYUI__}}/css/layui.css">
<div class="form-group">
<label class="col-md-1 control-label" for="example-hf-password">缩略图</label>
<div class="col-md-11">
<div class="layui-upload">
<input type="hidden" class="form-control input-sm m-b-10" name="thumb" value="" id="thumb" readonly="readonly">
<button type="button" class="layui-btn" id="test1" style="background-color: #3d3d3d"><i class="layui-icon"></i>上传图片</button>
<div class="layui-upload-list" id="link" style="display: none">
<img class="layui-upload-img" id="demo1" width="105px" height="100px">
<em style="width: 105px;height: 100px;position: absolute;top: 42.5%;left: 0.6%;cursor:pointer;" onclick="removeImg(this)" title="删除这张图片"></em>
</div>
<p id="demoText"></p>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-1 control-label" for="example-hf-password">公告内容</label>
<div class="col-md-11">
<textarea id="demo" name="content" style="display: none;" class="layui-textarea layui-hide"></textarea>
</div>
</div>
<script src="{
{__LAYUI__}}/layui.js"></script>
<script>
layui.use(['upload','layedit'], function() {
var $ = layui.jquery, upload = layui.upload;
//普通图片上传
var uploadInst = upload.render({
elem: '#test1'
, url: '/admin/upload'
, before: function (obj) {
//预读本地文件示例,不支持ie8
obj.preview(function (index, file, result) {
$('#demo1').attr('src', result); //图片链接(base64)
});
}
, done: function (res) {
//如果上传失败
if (res.code > 0) {
return layer.msg('上传失败');
}
//上传成功
$('#demo1').attr('src', res.file);
$('#demo1').parent('#link').show();
$('[name="thumb"]').val(res.data.src);
}
, error: function () {
//演示失败状态,并实现重传
var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
}
});
var layedit = layui.layedit;
layedit.set({
uploadImage: {
url: '/admin/upload' //接口url
,type: 'post' //默认post
}
});
var editIndex = layedit.build('demo'); //建立编辑器
//layui文本框提交不同步,此方法就是让提交时同步
$('#publish').click(function(){
layedit.sync(editIndex);
if(checkForm('textForm')) {
sendForm('textForm');
}
});
});
function removeImg(that) {
$(that).siblings('#demo1').attr('src', '');
$(that).parent('#link').hide();
$('[name="thumb"]').val('');
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
整体的laravel上传管理就这些了,大家可以推理其他的内容,祝大家技术越来越好!