LayUI 多图上传操作实例参考

源码技巧5年前 (2020-10-19)7470
  • 最近开发新项目的后台,需要上传多张图片的功能,并且使用的是 Layui 前端框架,在整合效果的过程中,也是费了好多时间,在此稍作记录,希望能帮到各位道友!谢谢…

✄ 操作步骤

  • 本文,主要展示核心的操作代码,当然注意是在引入 layui.css、layui.js 的前提下(赘述一番)

① 首先,展示一下效果:

②. 局部 html 代码参考
  • 首先展示一下核心代码:

    <div class="layui-form-item">
        <label class="layui-form-label">多图列表:</label>
        <div class="layui-upload layui-input-block">
            <button type="button" class="layui-btn" id="btn_multiple_upload_img">多图上传</button>
            <button type="button" class="layui-btn" id="btn_image_clear">清空多图</button>
            <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
                <div class="layui-upload-list" id="upload_image_list"></div>
                <input type="hidden" name="images_str" class="upload_image_url" value="">
            </blockquote>
        </div>
    </div>

  • 注意其中的 一个<input> 作为隐藏域,用于保存多图上传的资源数组,方便后期进行 form 表单的提交)

③. 核心 js 代码参考
  • 参考 layUI 官方文档,以及下面所作的部分解释,应该能看个八分懂吧 …

/**
 * 多图上传按钮 监听事件
 */layui.use(['upload'], function () {
    var upload = layui.upload;
    upload.render({
        elem: '#btn_multiple_upload_img'
        ,url: image_upload_url //改成您自己的上传接口
        ,multiple: true
        ,before: function(obj){
            //预读本地文件示例,不支持ie8
            obj.preview(function(index, file, result){
                $('#upload_image_list').append('<img style="height: 66px;margin-left: 7px" src="'+ result +'" title="单击删除" onclick="delMultipleImgs(this)" 
                class="layui-upload-img">');
            });
        }
        ,done: function(res){
            //上传完毕
            if (res.status == 1) {
                var last_url = $(".upload_image_url").val();
                var upload_image_url = "";
                if(last_url){
                    upload_image_url = last_url+","+res.data.url;
                }else {
                    upload_image_url = res.data.url;
                }
                $(".upload_image_url").val(upload_image_url);
            }else {
                dialog.tip(res.message);
            }
        }
    });});/**
 * 多图清除按钮点击事件
 */$("#btn_image_clear").click(function () {
    $('#upload_image_list').html("");
    $(".upload_image_url").val('');});/**
 * 多图上传的单击删除操作
 * @param this_img
 */function delMultipleImgs(this_img) {
    //获取下标
    var subscript = $("#upload_image_list img").index(this_img);
    multiple_images = $('.upload_image_url').val().split(",");
    //删除图片
    this_img.remove();
    //删除数组
    multiple_images.splice(subscript, 1);
    $('.upload_image_url').val(multiple_images);};

④. 补充参考 PHP 后台上传图片资源的代码
  • 毕竟本小白是个PHPer,语言都是相通的,不要太纠结.

<?phpnamespace app\api\Controller;use think\Request;class Upload{
    /**
     * 单一图片的上传操作
     * @param Request $request
     */
    public function img_file(Request $request)
    {
        $status = 0;
        $data = [];
        if ($request->Method()== 'POST') {
            $file = $request->file('file');
            // 移动到框架应用根目录/upload/ 目录下
            $info = $file->move('upload');
            if ($info){
                //把反斜杠(\)替换成斜杠(/) 因为在windows下上传路是反斜杠径
                $getSaveName=str_replace("\\","/",$info->getSaveName());
                $fileUrl = '/upload/'.$getSaveName;
                $status = 1;
                $data['url'] = $fileUrl;
                $message = '上传成功';
            }else{
                $message = "上传失败 ".$file->getError();
            }
        } else {
            $message = "参数错误";
        }
        return showMsg($status, $message,$data);
    }}

♖ 附录

  • 1.多多动手,实际操作一下就会发现,没啥难的,就分个好不好看而已…


发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。