laravel上传内容管理

首先先在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上传管理就这些了,大家可以推理其他的内容,祝大家技术越来越好!

猜你喜欢

转载自blog.csdn.net/lo6064200/article/details/104693631