webuploader前端页面

初始化js

/**
 * 页面初始化
 * @private
 */
function _init() {

     //  这个必须要再uploader实例化前面
    WebUploader.Uploader.register({
        'before-send-file': 'beforeSendFile',//整个文件上传前
        'before-send': 'beforeSend', //每个分片上传前
        "after-send-file": "afterSendFile"  //分片上传完毕
    }, {
        beforeSendFile: function (file) {
            // Deferred对象在钩子回掉函数中经常要用到,用来处理需要等待的异步操作。
            var deferred = WebUploader.Deferred();
            // 根据文件内容来查询MD5,判断是否是同一个文件
            debugger
            uploader.md5File(file, 0, 1024 * 1024)
                .progress(function (percentage) {
                    getProgressBar(file, percentage, "MD5", "正在计算md5值");
                    if (percentage == 1) {
                        getProgressBar(file, percentage, "MD5", "计算md5值完成")
                        $('#' + file.id).find('.progress').fadeOut();
                    }
                })
                .then(function (val) { // 完成
                    console.info(val);
                    console.log("MD5计算完成。");
                    console.log("正在查找有无断点...");
                    file.uid = WebUploader.Base.guid();
                    file.md5 = val;
                    md5(file);
                    //获取文件信息后进入下一步
                    deferred.resolve();
                });
            return deferred.promise();
        },

        beforeSend: function (block) {
            var indexchunk = block.file.indexcode;//获取已经上传过的下标
            var deferred = WebUploader.Deferred();
            if (indexchunk > 0) {
                if (block.chunk > indexchunk) {
                    //分块不存在,重新发送该分块内容
                    deferred.resolve();
                } else {
                    //分块存在,跳过
                    deferred.reject();
                }
            } else {
                //分块不存在,重新发送该分块内容
                deferred.resolve();
            }
            //返回Deferred的Promise对象。
            return deferred.promise();
        }
        , afterSendFile: function (file) {
            //如果所有分块上传成功,则通知后台合并分块
            $.ajax({
                type: "POST",
                url: "${ctx}/break/filewebMerge.json",  //ajax将所有片段合并成整体
                data: {
                    fileName: file.name,
                    fileMd5: file.md5
                },
                success: function (data) {

                }, error: function () {

                }
            });
        }
    });

    /**
     * 实例化
     */
     uploader = WebUploader.create({
        // swf文件路径
        swf: '/webjars/plugins/webupload/Uploader.swf',
        // 文件接收服务端。
        server: apiUrls.rootPath + "dmDocument/uploadTest",
        // 选择文件的按钮。可选。
        // 内部根据当前运行是创建,可能是input元素,也可能是flash.
        pick: {
            id: '#picker',
            label: '点击选择文件'
        },
        auto: false,
        duplicate: false,//去重, 根据文件名字、文件大小和最后修改时间来生成hash Key
        threads: 3,
        // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
        resize: false,
        chunked: true,//开启分片
        chunkSize: 1024 * 1024 * 50, //每次50M
        fileSizeLimit: 50 * 1024 * 1024 * 1024,//50G 验证文件总大小是否超出限制, 超出则不允许加入队列
        fileSingleSizeLimit: 10 * 1024 * 1024 * 1024 //10G 验证单个文件大小是否超出限制, 超出则不允许加入队列
    });

    // 当有文件被添加进队列的时候
    uploader.on('fileQueued', function (file) {
        $("#thelist").append('<div id="' + file.id + '" class="item">' +
            '<h4 class="info">' + file.name + '</h4>' +
            '<p class="state">等待上传...</p>' +
            '</div>');
        /* uploader.md5File(file,0, 1024 * 1024 * 50)
         console.log("正在计算MD5值...");
         uploader.md5File(file)
             .progress(function (percentage) {
                 getProgressBar(file, percentage, "MD5", "正在计算md5值");
                 if (percentage == 1) {
                     getProgressBar(file, percentage, "MD5", "计算md5值完成")
                 }
             })
             .then(function (val) { // 完成
                 file.md5 = val;
                 console.log("MD5计算完成。");
                 console.log("正在查找有无断点...");
                 console.info(val);
                 file.uid = WebUploader.Base.guid();
                 md5(file);
             });*/
        $("#stopBtn").click(function () {
            console.info("暂停");
            uploader.stop(true);
        });

        //继续下载
        $("#restart").click(function () {
            //debugger
            //md5(file);
            uploader.upload();
        });

    });

     //当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。
    uploader.onUploadBeforeSend = function (obj, data) {
        //console.log("onUploadBeforeSend");
        var file = obj.file;
        data.md5 = file.md5 || '';
        data.uid = file.uid;
    };


    // 文件上传过程中创建进度条实时显示。
    uploader.on('uploadProgress', function (file, percentage) {
        getProgressBar(file, percentage, "文件", "上传进度", "上传中");
    });
}
/**
 * 绑定页面按钮事件
 * @return {[type]} [description]
 */
var _bindBtnEvent = function () {

     //上传文件按钮
    $("#ctlBtn").on('click', function () {
        uploader.upload();
    })

    uploader.on('uploadSuccess', function (file) {
        $('#' + file.id).find('p.state').text('已上传');
    });

    uploader.on('uploadError', function (file) {
        $('#' + file.id).find('p.state').text('上传出错');
    });

    uploader.on('uploadComplete', function (file) {
        $('#' + file.id).find('.progress').fadeOut();
    });
}
  /**
     *  生成进度条封装方法
     * @param file 文件
     * @param percentage 进度值
     * @param id_Prefix id前缀
     * @param titleName 标题名
     */
    function getProgressBar(file, percentage, id_Prefix, titleName, stateName) {
        var $li = $('#' + file.id), $percent = $li.find('#' + id_Prefix + '-progress-bar');
        // 避免重复创建
        if (!$percent.length) {
            $percent = $('<div id="' + id_Prefix + '-progress" class="progress progress-striped active">' +
                '<div id="' + id_Prefix + '-progress-bar" class="progress-bar" role="progressbar" style="width: 0%">' +
                '</div>' +
                '</div>'
            ).appendTo($li).find('#' + id_Prefix + '-progress-bar');
        }
        $percent.css('width', parseInt(percentage * 100) + "%");
        $percent.html(titleName + ':' + parseInt(percentage * 100) + "%");
        $li.find('p.state').text(stateName);
    }

    var md5 = function (file) {
        var md5 = file.md5;
        // 调用方法发送请求服务
        wui.ajax({
            url: apiUrls.rootPath + "dmDocument/checkshard?fileMd5=" + md5,  //验证文件是否上传过程中中断掉,断点续传,不需要重新开始上传
            method: "GET",
            onSuccess: function (res) {
                var datacode = res.statusCode;
                file.indexcode = datacode;
            },
            onError: function (res) {
            },
            async: false,
        })
    }

html页面

<!DOCTYPE html>
<html lang="en" class="no-js">

<head>
    <title>文档列表</title>
    <script src="/webjars/plugins/jquery.min.js"></script>
    <link rel="stylesheet" href="/webjars/plugins/webupload/webuploader.css">
    <link rel="stylesheet" type="text/css" href="/webjars/themes/layout/wui.min.css"/>

    <link rel="stylesheet" href="/webjars/plugins/webupload/bootstrap.min.css">
    <link rel="stylesheet" href="/webjars/plugins/webupload/bootstrap-theme.min.css">
    <script type="text/javascript" src="/webjars/plugins/webupload/webuploader.nolog.js"></script>

    <!-- WUI组件脚本 -->
    <script src="/webjars/wui.min.js" type="text/javascript"></script>
    <script src="/webjars/wui.plugins.min.js" type="text/javascript"></script>
    <!-- 自定义脚本 -->
    <script src="/js/common/apiUrls.js" type="text/javascript"></script>
    <!--<script src="/js/webupload/test1.js" type="text/javascript"></script>-->
    <script src="/js/webuploader/uploader.js" type="text/javascript"></script>
</head>

<body>
<div id="uploader" class="wu-example">
    <!--用来存放文件信息-->
    <!--<div id="thelist" class="uploader-list"></div>-->

    <div class="btns">
        <div id="picker">选择文件</div>
        <button id="ctlBtn" class="btn btn-default">全部上传</button>
        <button id="stopBtn" class="btn btn-default">全部暂停</button>
        <button id="restart" class="btn btn-default">全部继续</button>
    </div>
    <!--展示带上传文件-->
    <div class="ui-jqgrid-hbox">
        <table style="width: 100%;" id="fileTemplate">
            <thead>
            <tr>
                <th>文件名</th>
                <th>大小</th>
                <th>状态</th>
                <th>操作</th>
            </tr>
            </thead>
            <!--存放文件列表-->
            <tbody id="fileTable">

            </tbody>
        </table>
    </div>
</div>
</body>

</html>
<script type="text/html" id="fileTemplateId">
    <tr id="{{id}}">
        <td>{{name}}</td>
        <td>{{fileSize}}</td>
        <td class="pro" width="400px"><p class="state">等待中...</p>
        </td>
        <td id="show{{id}}">
            <a style="cursor:pointer" data-upload=false onclick="fileStart(this,'{{id}}')" class="file-play"
               data="{{id}}"><i class="fa fa-play"></i></a>
            &nbsp;&nbsp;
            <a title="删除" style="cursor:pointer" onclick="fileClose(this,'{{id}}')" class="file-close" data="{{id}}"><i
                    class="fa fa-close"></i></a>
            <a  title="上传成功" style="cursor:pointer;display: none"
               data="{{id}}"><i class="fa fa-check-circle finish"></i></a>


        </td>
    </tr>

</script>

示例展示

图片_20200410162229.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,072评论 0 3
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,652评论 0 15
  • 在新世纪的我们,国家一步步将道德上升到我们的日常生活中,但真正规范了吗?我想未必! 关于道德绑...
    深信文秘刘海琳28阅读 370评论 0 0
  • 你,所有想象中的第二人称 我想象你是光,而我 暗夜里的一种昆虫,像受一种召唤 于是我越过荒野,爬过坟墓 你像是出现...
    剑锋金阅读 273评论 0 1
  • 《临江仙·早春》 柳挽灵风戏暖波,千挑万缕春色。素洁疑似天仙落,缘是白鹅,跷首向天歌。 碧水浮光清云薄,良...
    听风唱阅读 575评论 0 0