/** * 基于jquery的图片上传控件 */!function ($) { "use strict"; //定义上传事件 var upImgEvent = { fileQueued: ‘fileQueued‘,//文件加载的时候触发 //statusChange: ‘statuschange‘, uploadSuccess: ‘uploadSuccess‘,//文件上传成功触发默认路径应该是固定的 uploadError: ‘uploadError‘,//文件上传报错触发 error: ‘error‘//文件上传验证报错的时候触发,比如大小,上传重复图片 }; //定义内部使用函数 var _util = { _isSupportImage: function () { var data = new Image(); var support = true; data.onload = data.onError = function () { if (this.width != 1 || this.height != 1) { support = false; } }; data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="; return support; }(), _renderHtml: function (file) { return $(‘<div class="file_img" id="‘ + file.id + ‘">‘ + ‘<div class="delete"><a href="javascript:deleteImg(\‘‘ + file.id + ‘\‘,1)">删除</a></div>‘ + ‘<span style="vertical-align: middle; display: inline-block; height: 100%;"></span>‘ + ‘<img id="img‘ + file.id + ‘" title="‘ + file.name + ‘" src="‘ + window.base + ‘/resources/images/loading_.gif" /> ‘ + ‘<div id="wart" style="position:absolute;z-index:99;left:5px;top:10px;"><span style="color: blue">图片正在上传.请等待...</span><div>‘+ ‘</div>‘) }, _showError: function (code) { $(‘body‘).hideLoading(); $("img").next().remove(); var text = null; switch (code) { case ‘exceed_size‘: text = ‘文件太大了..请重新上传‘; break; case ‘interrupt‘: text = ‘上传暂停..‘; break; default: text = ‘上传失败,请重试...‘; break; } alert(text); } }; var Img = function (element, options) { var imgRadio = { //图片属性 _ratio: function () { if (window.devicePixelRatio) { return window.devicePixelRatio; } else { return 1; } }, //像素比例 thumbWidth: 140 * this._ratio, thumbHeight: 140 * this._ratio }; //构造默认options var defaultOption = { packId:"#"+options.packId, swf: window.base + ‘/resources/js/webuploader/Uploader.swf‘,//ie6,7,8 需要flash支持,默认优先Html5 server: "http://localhost:8080/person"+options.uploadPath,//文件上传的服务器路径 pick: { id: "#"+options.uploaderId, multiple: options.isMultiple//是否单选 }, duplicate: true,//可以重复 sendAsBinary: true,//android4 有些机型必须开启 为了兼容 都启用这种模式 auto: true,//开启选择图片自动上传 fileVal: ‘bin‘,//文件上传字段名称 fileSingleSizeLimit: 10 * 1024 * 1024, //10M 单个图片只能最大10M disableGlobalDnd: true,//不能拖拽 accept: { //上传图片所支持的类型 title: "上传图片", extensions: ‘gif,jpg,jpeg,bmp,png‘, mimeTypes: ‘image/*‘ }, resize: false,//不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! //压缩 compress: { width: 1600, height: 1600, // 图片质量,只有type为`image/jpeg`的时候才有效。 quality: 90, // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. allowMagnify: false, // 是否允许裁剪。 crop: false, // 是否保留头部meta信息。 preserveHeaders: true, // 如果发现压缩后文件大小比原来还大,则使用原来图片 // 此属性可能会影响图片自动纠正功能 noCompressIfLarger: false, // 单位字节,如果图片大小小于此值,不会采用压缩。 compressSize: 1024 * 1024 * 1 }, callback:undefined || options.callback, success:undefined || options.success }; this.init(defaultOption,imgRadio); }; Img.prototype.init = function (options,radio) { var uploader = WebUploader.create(options); //构造监听事件 uploader.on(upImgEvent.fileQueued, function (file) { $(‘body‘).showLoading(); $(options.pick.id).showLoading(); if (file.getStatus() === ‘invalid‘) { _util._showError(file.statusText); } if(options.callback!=undefined && options.callback instanceof Function){ this.makeThumb(file, function (error, src) { if (error) { console.log("can not preview :" + error); return; } if (_util._isSupportImage) { options.callback.apply(this,[file,src]); } }, radio.thumbWidth, radio.thumbHeight); }else{ var html = _util._renderHtml(file); //构造预览图 this.makeThumb(file, function (error, src) { var img = $("#img" + file.id); if (error) { console.log("can not preview :" + error); return; } if (_util._isSupportImage) { img.empty().attr(‘src‘, src); } }, radio.thumbWidth, radio.thumbHeight); html.appendTo($(options.packId)); } }); uploader.on(upImgEvent.uploadSuccess, function (file, response) { if (response.success) { $(‘body‘).hideLoading(); $(options.pick.id).hideLoading(); $("img").next().remove(); var imgResponse = response.data; if(options.success!=undefined && options.success instanceof Function){ options.success.apply(this,[file,imgResponse]); } }else{ $(‘body‘).hideLoading(); $("img").next().remove(); alert(response.msg); } }); uploader.on(upImgEvent.uploadError, function (file) { $(‘body‘).hideLoading(); $("img").next().remove(); alert("文件上传失败" + file.name); }); uploader.on(upImgEvent.error, function (code) { $(‘body‘).hideLoading(); $("img").next().remove(); if (code === ‘F_DUPLICATE‘) alert("文件已经存在.请换个图片重新上传..."); else if (code === ‘F_EXCEED_SIZE‘) alert("文件不能超过10M,请重新上传"); else if (code === ‘Q_TYPE_DENIED‘) alert("文件类型只能是图片类型,请重新上传"); else alert("error type :" + code); }); }; $.webUploader = function (options) { return new Img(this, options); }}(window.jQuery);function deleteImg(id, type){ $("#" + id).remove(); //如果是sybd则显示上传插件 if (type == 1) { $("#sybd").parent().show(); }}
时间: 2024-11-03 22:55:32