uploadlogo.js 9.78 KB
(function($) {
        window.uploadConfig = window.uploadConfig || {};
        uploadConfig = $.extend({
                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                pick: '#filePicker',
                formData: {},
                // 选完文件后,是否自动上传。
                auto: true,
                // swf文件路径
                swf: './webuploader/Uploader.swf',
                chunked: false,
                chunkSize: 512 * 1024,
                // 文件接收服务端。
                server: '/upload/uploadimg',
                //server: 'http://webuploader.duapp.com/server/fileupload.php',
                //设置文件上传域的name
                fileVal: 'images',
                // 只允许选择图片文件。
                accept: {
                        title: 'Images',
                        extensions: 'gif,jpg,jpeg,png',
                        mimeTypes: 'image/*'
                },
                // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
                disableGlobalDnd: true,
                fileSizeLimit: 10 * 1024 * 1024, // 10 M
                fileSingleSizeLimit: 10 * 1024 * 1024    // 10 M
        }, uploadConfig);
        // 当domReady的时候开始初始化
        $(function() {
                var $wrap = $('#uploader'),
                        $list = $wrap.find('.uploader-list'),
                        // 优化retina, 在retina下这个值是2
                        ratio = window.devicePixelRatio || 1,
                        // 缩略图大小
                        thumbnailWidth = 110 * ratio,
                        thumbnailHeight = 110 * ratio,
                        // 检测是否已经安装flash,检测flash的版本
                        flashVersion = (function() {
                                var version;

                                try {
                                        version = navigator.plugins[ 'Shockwave Flash' ];
                                        version = version.description;
                                } catch (ex) {
                                        try {
                                                version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')
                                                        .GetVariable('$version');
                                        } catch (ex2) {
                                                version = '0.0';
                                        }
                                }
                                version = version.match(/\d+/g);
                                return parseFloat(version[ 0 ] + '.' + version[ 1 ], 10);
                        })(),
                        supportTransition = (function() {
                                var s = document.createElement('p').style,
                                        r = 'transition' in s ||
                                        'WebkitTransition' in s ||
                                        'MozTransition' in s ||
                                        'msTransition' in s ||
                                        'OTransition' in s;
                                s = null;
                                return r;
                        })(),
                        // WebUploader实例
                        uploader;

                if (!WebUploader.Uploader.support('flash') && WebUploader.browser.ie) {

                        // flash 安装了但是版本过低。
                        if (flashVersion) {
                                (function(container) {
                                        window['expressinstallcallback'] = function(state) {
                                                switch (state) {
                                                        case 'Download.Cancelled':
                                                                alert('您取消了更新!')
                                                                break;

                                                        case 'Download.Failed':
                                                                alert('安装失败')
                                                                break;

                                                        default:
                                                                alert('安装已成功,请刷新!');
                                                                break;
                                                }
                                                delete window['expressinstallcallback'];
                                        };

                                        var swf = './expressInstall.swf';
                                        // insert flash object
                                        var html = '<object type="application/' +
                                                'x-shockwave-flash" data="' + swf + '" ';

                                        if (WebUploader.browser.ie) {
                                                html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
                                        }

                                        html += 'width="100%" height="100%" style="outline:0">' +
                                                '<param name="movie" value="' + swf + '" />' +
                                                '<param name="wmode" value="transparent" />' +
                                                '<param name="allowscriptaccess" value="always" />' +
                                                '</object>';

                                        container.html(html);

                                })($wrap);

                                // 压根就没有安转。
                        } else {
                                $wrap.html('<a href="http://www.adobe.com/go/getflashplayer" target="_blank" border="0"><img alt="get flash player" src="http://www.adobe.com/macromedia/style_guide/images/160x41_Get_Flash_Player.jpg" /></a>');
                        }

                        return;
                } else if (!WebUploader.Uploader.support()) {
                        alert('Web Uploader 不支持您的浏览器!');
                        return;
                }

                // 实例化
                uploader = WebUploader.create(uploadConfig);

                // 当有文件添加进来的时候
                uploader.on('fileQueued', function(file) {
                        window.uploadFile && uploader.removeFile(window.uploadFile);
                        var $li = $(
                                '<div id="' + file.id + '" class="file-item thumbnail">' +
                                '<img>' +
                                '<div class="info">' + file.name + '</div>' +
                                '</div>'
                                ),
                                $img = $li.find('img');


                        // $list为容器jQuery实例
                        $list.html($li);

                        // 创建缩略图
                        // 如果为非图片文件,可以不用调用此方法。
                        // thumbnailWidth x thumbnailHeight 为 100 x 100
                        uploader.makeThumb(file, function(error, src) {
                                if (error) {
                                        $img.replaceWith('<span>不能预览</span>');
                                        return;
                                }

                                $img.attr('src', src);
                        }, thumbnailWidth, thumbnailHeight);
                        window.uploadFile = file;
                });

                // 文件上传过程中创建进度条实时显示。
                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 class="progress-bar" role="progressbar" style="width: 0%">' +
	                      '</div>' +
	                    '</div>').appendTo($li).find('.progress-bar');
	                }
	                $li.find('p.state').text("上传中");
	                $percent.css( 'width', percentage * 100 + '%' );
                });

                // 文件上传成功,给item添加成功class, 用样式标记上传成功。
                uploader.on('uploadSuccess', function(file, response) {
                        $('#' + file.id).addClass('upload-state-done');

                        if (typeof uploadSuccess == 'function')
                                uploadSuccess(file, response);
                });

                // 文件上传失败,显示上传出错。
                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();
                });

                uploader.on('ready', function() {
                        window.uploader = uploader;
                });
        });

})(jQuery);