duanyue

WebUploader,由Baidu FEX 团队开发,以H5为主,FLASH为辅,兼容 IE6+,iOS 6+, android 4+,采用大文件分片并发上传,极大的提高了文件上传效率,看了官方文档就知道,能满足你所需要的所有功能。

官方地址:http://fex.baidu.com/webuploader/

由于项目需求,需要压缩图片上传,于是我找到了这款插件,个人感觉很不错。

// 初始化Web Uploader
            uploader = WebUploader.create({

                // 自动上传。
                auto: true,

                // swf文件路径
                swf:  \'webuploader/Uploader.swf\',

                // 文件接收服务端。
                server: \'discern/ceshi/cc\',

                // [默认值:\'file\']  设置文件上传域的name。
                fileVal:\'file\',

                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                pick: \'#filePicker\',

                //   图片压缩配置参数列表
                compress:{
                    width: 100,
                    height: 100,

                    // 图片质量,只有type为`image/jpeg`的时候才有效。
                    quality: 100,

                    // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
                    allowMagnify: false,

                    // 是否允许裁剪。
                    crop: false,

                    // 是否保留头部meta信息。
                    preserveHeaders: true,

                    // 如果发现压缩后文件大小比原来还大,则使用原来图片
                    // 此属性可能会影响图片自动纠正功能
                    noCompressIfLarger: false,

                    // 单位字节,如果图片大小小于此值,不会采用压缩。
                    compressSize: 0
                },

                // 只允许选择文件,可选。
                accept: {
                    title: \'Images\',
                    extensions: \'gif,jpg,jpeg,bmp,png\',
                    mimeTypes: \'image/*\'
                }
            });

            // 当有文件添加进来的时候  (预览)
            uploader.on( \'fileQueued\', function( file ) {
                var $li = $(
                        \'<div id="\' + file.id + \'" class="file-item thumbnail">\' +
                        \'<div class="correct"></div><div class="error-icon"></div>\'+
                        \'<img>\' +
                        \'<p class="progress"><span style="color: #000"></span></p>\'+
                        \'<div class="info">\' + file.name + \'</div>\' +
                        \'</div>\'
                    ),
                    $img = $li.find(\'img\');

                $list.append( $li );

                // 创建缩略图
                uploader.makeThumb( file, function( error, src ) {
                    if ( error ) {
                        $img.replaceWith(\'<span>不能预览</span>\');
                        return;
                    }

                    $img.attr( \'src\', src );
                }, thumbnailWidth, thumbnailHeight );
            });

            // 文件上传过程中创建进度条实时显示。
            uploader.on( \'uploadProgress\', function( file, percentage ) {
                var $li = $( \'#\'+file.id ),
                    $percent = $li.find(\'.progress span\');

                // 避免重复创建
                if ( !$percent.length ) {
                    $percent = $(\'<p class="progress"><span></span></p>\')
                        .appendTo( $li )
                        .find(\'span\');
                }

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

            // 文件上传成功,ajax返回data参数
            uploader.on( \'uploadSuccess\', function( file,data ) {
                console.log(file);
                console.log(data);
            });

            // 文件上传失败,现实上传出错。
            uploader.on( \'uploadError\', function( file ) {
                var $li = $( \'#\'+file.id ),
                    $error = $li.find(\'div.error\');

                // 避免重复创建
                if ( !$error.length ) {
                    $error = $(\'<div class="error"></div>\').appendTo( $li );
                }

                $error.text(\'上传失败!!!\');
            });

            // 完成上传完了,成功或者失败,先删除进度条。
            uploader.on( \'uploadComplete\', function( file ) {
                $( \'#\'+file.id ).find(\'.progress\').remove();
            });

项目亲测这个配置一张5MB左右的图片,经过压缩后只有200kb左右!

分类:

技术点:

相关文章: