前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebUploader文件上传插件

WebUploader文件上传插件

作者头像
一觉睡到小时候
发布2019-07-04 17:31:20
3.8K3
发布2019-07-04 17:31:20
举报
文章被收录于专栏:国产程序员

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。

官方文档:http://fex.baidu.com/webuploader/doc/?qq-pf-to=pcqq.group

各个参数的说明文档中都有,可以详细参考一下文档,再这里给大家列出一个上传文件的实现,如有不足的地方希望大家指出,谢谢。

首先引如外部资源 css,js文件:

这里${ctxStatic}不要管,这个只是spring项目中使用el表达式来写静态文件前缀了。使用的话,测试的话直接写死绝对路即可。

<link href="${ctx}/css/plugins/webuploader/webuploader.css"rel="stylesheet">

代码语言:javascript
复制
<script src="${ctx}/js/plugins/webuploader/webuploader.min.js"></script>
代码语言:javascript
复制
引入bootstrap的js
代码语言:javascript
复制
<script src="${ctx}/js/plugins/bootstrap-table/bootstrap-table.js"></script>

接着写容器的DOM

<div class="form-horizontal"> <div class="form-group"> <label class="col-sm-3control-label">选择文件</label> <div class="col-sm-3"> <label id="picker">选择文件</label> </div> <div class="col-sm-6"> <input id="uploadBtn"type="button" value="上传文件" class="btnbtn-success"/> <input id="fileName" type="hidden" name="fileName"> <input id="configPreName"type="hidden" name="configPreName" value="tracingUpload"> <button id="clearBtn" class="btnbtn-warning" type="button">清空上传文件 </button> </div> </div> </div> <div class="form-horizontal"> <div class="form-group"> <div class="col-sm-3"></div> <div class="col-sm-6"> <!--用来存放文件信息--> <div id="thelist" class="uploader-list"></div> </div> </div>

最后初始化webuploader组件,设置上传等事件监听。

代码语言:javascript
复制
/**
     * 上传文件方法
     */

    function uploadFiles() {

        var $list = $('#thelist'),
            $btn = $('#uploadBtn'),
            $clearBtn = $('#clearBtn'),
            state = 'pending';
        var configPreName = $('#configPreName').val();
        var uploader = WebUploader.create({
            // swf文件路径
            swf: '/js/plugins/webuploader/Uploader.swf',
            // 文件接收服务端。
            server: '/documents/file/upload',
            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建,可能是input元素,也可能是flash.
            pick: '#picker',
            // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
            resize: false,
            // 上传文件格式,可支持多种格式
            accept: {
                title: 'Files',
                extensions: 'gif,jpg,jpeg,bmp,png,pdf,doc,docx,txt,xls,xlsx,ppt,pptx,zip,mp3,mp4,text,csv',
                mimeTypes: 'image/*,text/*'
                //word
                + ',application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
                //excel
                + ',application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                //ppt
                + ',application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation'
                + ',application/pdf'
                + ',application/zip'
                + ',application/csv'
            }
        });


// 当有文件被添加进队列的时候
        uploader.on('fileQueued', function (file) {
            var files = uploader.getFiles();
            for (var i = 0; i < files.length - 1; i++) {
                uploader.removeFile(files[i], true);
            }
            $list.html('');
            $list.append('<div id="' + file.id + '">' +
                '<h4>' + file.name + '</h4>' +
                '<p>单击上传按钮开始上传...</p>' +
                '</div>');
        });
// 文件上传过程中创建进度条实时显示。
        uploader.on('uploadProgress', function (file, percentage) {
            var $li = $('#' + file.id),
                $percent = $li.find('.progress .progress-bar');
            // 避免重复创建
            if (!$percent.length) {
                $percent = $('<div class="progress progress-striped active">' +
                    '<div role="progressbar" style="width: 0%">' +
                    '</div>' +
                    '</div>').appendTo($li).find('.progress-bar');
            }

            $li.find('p.state').text('上传中');

            $percent.css('width', percentage * 100 + '%');
        });

        uploader.on('uploadSuccess', function (file, response) {
            if (response.msgCode == 'success') {
                toastr.success("", response.message);
                //后续显示处理,另行增加            }
            if (response.msgCode == 'fail') {
                toastr.warning("", response.message);
            }
            var files = uploader.getFiles();
            for (var i = 0; i < files.length; i++) {
                uploader.removeFile(files[i], true);
            }
            $list.html('');
         });

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

        uploader.on('uploadComplete', function (file) {
            $('#' + file.id).find('.progress').fadeOut();
        });

        uploader.on('all', function (type) {
            if (type === 'startUpload') {
                state = 'uploading';
            } else if (type === 'stopUpload') {
                state = 'paused';
            } else if (type === 'uploadFinished') {
                state = 'done';
            }

            if (state === 'uploading') {
                $btn.text('暂停上传');
            } else {
                $btn.text('导入');
            }
        });

//上传
        $btn.on('click', function () {

if (state === 'uploading') { uploader.stop(); } else { uploader.upload(); } }); //清空 $clearBtn.on('click', function () { //alert(state); var files = uploader.getFiles(); for (var i = 0; i < files.length; i++) { uploader.removeFile(files[i], true); } $list.html(''); }); }

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档