Layui+Thinkphp5上传图片示例

LayUI   2025-01-26 13:54   78   0  

index.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui-v2.8.0/css/layui.css" media="all">
    <style>
        .layui-upload .mark_button {
            position: absolute;
            right: 15px;
        }

        .upload-img {
            position: relative;
            display: inline-block;
            width: 300px;
            height: 200px;
            margin: 0 10px 10px 0;
            transition: box-shadow .25s;
            border-radius: 4px;
            box-shadow: 0px 10px 10px -5px rgba(0, 0, 0, 0.5);
            transition: 0.25s;
            -webkit-transition: 0.25s;
            margin-top: 15px;
        }

        .layui-upload-img {
            width: 300px;
            height: 200px;
            border-radius: 4px;
        }

        .upload-img:hover {
            cursor: pointer;
            box-shadow: 0 0 4px rgba(0, 0, 0, 1);
            transform: scale(1.2);
            -webkit-transform: scale(1.05);
        }

        .upload-img input {
            position: absolute;
            left: 0px;
            top: 0px;
        }

        .upload-img button {
            position: absolute;
            right: 0px;
            top: 0px;
            border-radius: 6px;
        }
    </style>
</head>

<body>
    <div class="layui-upload ">
        <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
            预览图:
            <div class="layui-upload-list" id="imgs">
            </div>
        </blockquote>
        <div class="mark_button">
            <button type="button" class="layui-btn layui-btn-normal" id="sele_imgs">选择文件</button>
            <button type="button" class="layui-btn" id="upload_imgs" disabled>开始上传</button>
            <button type="button" class="layui-btn layui-btn-danger" id="dele_imgs">删除选中图片</button>
        </div>
    </div>

    <script type="text/javascript" src="https://www.layuicdn.com/layui-v2.8.0/layui.js"></script>
    <script id="img_template" type="text/html">
        <div class="upload-img" filename="{{ d.index }}">
            <input type="checkbox" name="" lay-skin="primary">
            <img src="{{ d.result }}" alt="{{ d.name }}" class="layui-upload-img">
        </div>
    </script>

    <script>
        layui.use(['upload', 'laytpl', 'form'], function() {
            var $ = layui.jquery,
                upload = layui.upload,
                laytpl = layui.laytpl,
                form = layui.form;

            //批量删除 单击事件
            $('#dele_imgs').click(function() {
                $('input:checked').each(function(index, value) {
                    var filename = $(this).parent().attr("filename");
                    delete imgFiles[filename];
                    $(this).parent().remove()
                });
            });
            var imgFiles;

            //多图片上传
            var uploadInst = upload.render({
                elem: '#sele_imgs' //开始
                    ,
                acceptMime: 'image/*',
                url: '/index/ceshi/image',
                auto: false,
                bindAction: '#upload_imgs',
                multiple: true,
                size: 1024 * 12,
                choose: function(obj) { //选择图片后事件
                    var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
                    imgFiles = files;
                    $('#upload_imgs').prop('disabled', false);

                    //预读本地文件示例,不支持ie8
                    obj.preview(function(index, file, result) {
                        var data = {
                            index: index,
                            name: file.name,
                            result: result
                        };
                        //将预览html 追加
                        laytpl(img_template.innerHTML).render(data, function(html) {
                            $('#imgs').append(html);
                        });
                        //绑定单击事件
                        $('#imgs div:last-child>img').click(function() {
                            var isChecked = $(this).siblings("input").prop("checked");
                            $(this).siblings("input").prop("checked", !isChecked);
                            return false;
                        });
                    });
                },
                before: function(obj) { //上传前回函数
                    layer.load(); //上传loading
                },
                done: function(res, index, upload) { //上传完毕后事件
                    layer.closeAll('loading'); //关闭loading
                    //上传完毕
                    $('#imgs').html(""); //清空操作
                    top.layer.msg("上传成功!");
                    return delete imgFiles[index]; //删除文件队列已经上传成功的文件
                },
                error: function(index, upload) {
                    layer.closeAll('loading'); //关闭loading
                    top.layer.msg("上传失败!");
                }
            });
        });
    </script>
</body>

</html>


Thinkphp5控制器:

/**图片上传*/
    public function image(){
        $file = request()->file('file');
        // 移动到框架应用根目录/uploads/ 目录下
        try{
            // 验证
            validate(['imgFile'=>[
                'fileSize' => 410241024,
                'fileExt' => 'jpg,jpeg,png,bmp,gif',
                'fileMime' => 'image/jpeg,image/png,image/gif', //这个一定要加上,很重要我认为!
            ]])->check(['imgFile' => $file]);
            // 上传图片到本地服务器
            $saveName = \think\facade\Filesystem::disk('public')->putFile('',$file);
            $arr = ['status' => 200, 'msg' => '成功', 'path' => '/upload/'. $saveName];
            return json($arr);
        } catch (\Exception $e) {
            // 验证失败 输出错误信息
            return $this->exceptionHandle($e,'图片上传失败!' . $e->getMessage(),'json','');
        }
    }



博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。