- /*
- UploadiFive 1.1.2
- Copyright (c) 2012 Reactive Apps, Ronnie Garcia
- Released under the UploadiFive Standard License <http://www.uploadify.com/uploadifive-standard-license>
- */
- (function(b) {
- var a = {
- init: function(c) {
- return this.each(function() {
- var g = b(this);
- g.data("uploadifive", {
- inputs: {},
- inputCount: 0,
- fileID: 0,
- queue: {
- count: 0,
- selected: 0,
- replaced: 0,
- errors: 0,
- queued: 0,
- cancelled: 0
- },
- uploads: {
- current: 0,
- attempts: 0,
- successful: 0,
- errors: 0,
- count: 0
- }
- });
- var d = g.data("uploadifive");
- var f = d.settings = b.extend({
- auto: true,
- buttonClass: false,
- buttonText: "Select Files",
- checkScript: false,
- dnd: true,
- dropTarget: false,
- fileObjName: "Filedata",
- fileSizeLimit: 0,
- fileType: false,
- formData: {},
- height: 30,
- itemTemplate: false,
- method: "post",
- multi: true,
- overrideEvents: [],
- queueID: false,
- queueSizeLimit: 0,
- removeCompleted: false,
- simUploadLimit: 0,
- truncateLength: 0,
- uploadLimit: 0,
- uploadScript: "uploadifive.php",
- width: 100
- },
- c);
- if (isNaN(f.fileSizeLimit)) {
- var e = parseInt(f.fileSizeLimit) * 1.024;
- if (f.fileSizeLimit.indexOf("KB") > -1) {
- f.fileSizeLimit = e * 1000;
- } else {
- if (f.fileSizeLimit.indexOf("MB") > -1) {
- f.fileSizeLimit = e * 1000000;
- } else {
- if (f.fileSizeLimit.indexOf("GB") > -1) {
- f.fileSizeLimit = e * 1000000000;
- }
- }
- }
- } else {
- f.fileSizeLimit = f.fileSizeLimit * 1024;
- }
- d.inputTemplate = b('<input type="file">').css({
- "font-size": f.height + "px",
- opacity: 0,
- position: "absolute",
- right: "-3px",
- top: "-3px",
- "z-index": 999
- });
- d.createInput = function() {
- var j = d.inputTemplate.clone();
- var k = j.name = "input" + d.inputCount++;
- if (f.multi) {
- j.attr("multiple", true);
- }
- j.bind("change",
- function() {
- d.queue.selected = 0;
- d.queue.replaced = 0;
- d.queue.errors = 0;
- d.queue.queued = 0;
- var l = this.files.length;
- d.queue.selected = l;
- if ((d.queue.count + l) > f.queueSizeLimit && f.queueSizeLimit !== 0) {
- if (b.inArray("onError", f.overrideEvents) < 0) {
- alert("The maximum number of queue items has been reached (" + f.queueSizeLimit + "). Please select fewer files.");
- }
- if (typeof f.onError === "function") {
- f.onError.call(g, "QUEUE_LIMIT_EXCEEDED");
- }
- } else {
- for (var m = 0; m < l; m++) {
- file = this.files[m];
- d.addQueueItem(file);
- }
- d.inputs[k] = this;
- d.createInput();
- }
- if (f.auto) {
- a.upload.call(g);
- }
- if (typeof f.onSelect === "function") {
- f.onSelect.call(g, d.queue);
- }
- });
- if (d.currentInput) {
- d.currentInput.hide();
- }
- d.button.append(j);
- d.currentInput = j;
- };
- d.destroyInput = function(j) {
- b(d.inputs[j]).remove();
- delete d.inputs[j];
- d.inputCount--;
- };
- d.drop = function(m) {
- d.queue.selected = 0;
- d.queue.replaced = 0;
- d.queue.errors = 0;
- d.queue.queued = 0;
- var l = m.dataTransfer;
- var k = l.name = "input" + d.inputCount++;
- var j = l.files.length;
- d.queue.selected = j;
- if ((d.queue.count + j) > f.queueSizeLimit && f.queueSizeLimit !== 0) {
- if (b.inArray("onError", f.overrideEvents) < 0) {
- alert("The maximum number of queue items has been reached (" + f.queueSizeLimit + "). Please select fewer files.");
- }
- if (typeof f.onError === "function") {
- f.onError.call(g, "QUEUE_LIMIT_EXCEEDED");
- }
- } else {
- for (var o = 0; o < j; o++) {
- file = l.files[o];
- d.addQueueItem(file);
- }
- d.inputs[k] = l;
- }
- if (f.auto) {
- a.upload.call(g);
- }
- if (typeof f.onDrop === "function") {
- f.onDrop.call(g, l.files, l.files.length);
- }
- m.preventDefault();
- m.stopPropagation();
- };
- d.fileExistsInQueue = function(k) {
- for (var j in d.inputs) {
- input = d.inputs[j];
- limit = input.files.length;
- for (var l = 0; l < limit; l++) {
- existingFile = input.files[l];
- if (existingFile.name == k.name && !existingFile.complete) {
- return true;
- }
- }
- }
- return false;
- };
- d.removeExistingFile = function(k) {
- for (var j in d.inputs) {
- input = d.inputs[j];
- limit = input.files.length;
- for (var l = 0; l < limit; l++) {
- existingFile = input.files[l];
- if (existingFile.name == k.name && !existingFile.complete) {
- d.queue.replaced++;
- a.cancel.call(g, existingFile, true);
- }
- }
- }
- };
- if (f.itemTemplate == false) {
- d.queueItem = b('<div class="uploadifive-queue-item"> <a class="close" href="#">X</a> <div><span class="filename"></span><span class="filesize"></span><span class="fileinfo"></span></div> <div class="progress"> <div class="progress-bar"></div> </div> </div>');
- } else {
- d.queueItem = b(f.itemTemplate);
- }
- d.addQueueItem = function(k) {
- if (b.inArray("onAddQueueItem", f.overrideEvents) < 0) {
- d.removeExistingFile(k);
- k.queueItem = d.queueItem.clone();
- k.queueItem.attr("id", f.id + "-file-" + d.fileID++);
- k.queueItem.find(".close").bind("click",
- function() {
- a.cancel.call(g, k);
- return false;
- });
- var m = k.name;
- if (m.length > f.truncateLength && f.truncateLength != 0) {
- m = m.substring(0, f.truncateLength) + "...";
- }
- k.queueItem.find(".filename").html(m);
- var fileSize = Math.round(file.size / 1024);
- var suffix = 'KB';
- if (fileSize > 1000) {
- fileSize = Math.round(fileSize / 1000);
- suffix = 'MB';
- }
- var fileSizeParts = fileSize.toString().split('.');
- fileSize = fileSizeParts[0];
- if (fileSizeParts.length > 1) {
- fileSize += '.' + fileSizeParts[1].substr(0, 2);
- }
- fileSize += suffix;
- file.queueItem.find('.filesize').html('('+fileSize+')');
- k.queueItem.data("file", k);
- d.queueEl.append(k.queueItem);
- }
- if (typeof f.onAddQueueItem === "function") {
- f.onAddQueueItem.call(g, k);
- }
- if (f.fileType) {
- if (b.isArray(f.fileType)) {
- var j = false;
- for (var l = 0; l < f.fileType.length; l++) {
- if (k.type.indexOf(f.fileType[l]) > -1) {
- j = true;
- }
- }
- if (!j) {
- d.error("FORBIDDEN_FILE_TYPE", k);
- }
- } else {
- if (k.type.indexOf(f.fileType) < 0) {
- d.error("FORBIDDEN_FILE_TYPE", k);
- }
- }
- }
- if (k.size > f.fileSizeLimit && f.fileSizeLimit != 0) {
- d.error("FILE_SIZE_LIMIT_EXCEEDED", k);
- } else {
- d.queue.queued++;
- d.queue.count++;
- }
- };
- d.removeQueueItem = function(m, l, k) {
- if (!k) {
- k = 0;
- }
- var j = l ? 0 : 500;
- if (m.queueItem) {
- if (m.queueItem.find(".fileinfo").html() != " - 上传成功") {
- m.queueItem.find(".fileinfo").html(" - Cancelled");
- }
- m.queueItem.find(".progress-bar").width(0);
- m.queueItem.delay(k).fadeOut(j,
- function() {
- b(this).remove();
- });
- delete m.queueItem;
- d.queue.count--;
- }
- };
- d.filesToUpload = function() {
- var k = 0;
- for (var j in d.inputs) {
- input = d.inputs[j];
- limit = input.files.length;
- for (var l = 0; l < limit; l++) {
- file = input.files[l];
- if (!file.skip && !file.complete) {
- k++;
- }
- }
- }
- return k;
- };
- d.checkExists = function(k) {
- if (b.inArray("onCheck", f.overrideEvents) < 0) {
- b.ajaxSetup({
- async: false
- });
- var j = b.extend(f.formData, {
- filename: k.name
- });
- b.post(f.checkScript, j,
- function(l) {
- k.exists = parseInt(l);
- });
- if (k.exists) {
- if (!confirm("A file named " + k.name + " already exists in the upload folder.\nWould you like to replace it?")) {
- a.cancel.call(g, k);
- return true;
- }
- }
- }
- if (typeof f.onCheck === "function") {
- f.onCheck.call(g, k, k.exists);
- }
- return false;
- };
- d.uploadFile = function(k, l) {
- if (!k.skip && !k.complete && !k.uploading) {
- k.uploading = true;
- d.uploads.current++;
- d.uploads.attempted++;
- xhr = k.xhr = new XMLHttpRequest();
- if (typeof FormData === "function" || typeof FormData === "object") {
- var m = new FormData();
- m.append(f.fileObjName, k);
- for (i in f.formData) {
- m.append(i, f.formData[i]);
- }
- xhr.open(f.method, f.uploadScript, true);
- xhr.upload.addEventListener("progress",
- function(n) {
- if (n.lengthComputable) {
- d.progress(n, k);
- }
- },
- false);
- xhr.addEventListener("load",
- function(n) {
- if (this.readyState == 4) {
- k.uploading = false;
- if (this.status == 200) {
- if (k.xhr.responseText !== "Invalid file type.") {
- d.uploadComplete(n, k, l);
- } else {
- d.error(k.xhr.responseText, k, l);
- }
- } else {
- if (this.status == 404) {
- d.error("404_FILE_NOT_FOUND", k, l);
- } else {
- if (this.status == 403) {
- d.error("403_FORBIDDEN", k, l);
- } else {
- d.error("Unknown Error", k, l);
- }
- }
- }
- }
- });
- xhr.send(m);
- } else {
- var j = new FileReader();
- j.onload = function(q) {
- var t = "-------------------------" + (new Date).getTime(),
- p = "--",
- o = "\r\n",
- s = "";
- s += p + t + o;
- s += 'Content-Disposition: form-data; name="' + f.fileObjName + '"';
- if (k.name) {
- s += '; filename="' + k.name + '"';
- }
- s += o;
- s += "Content-Type: application/octet-stream" + o + o;
- s += q.target.result + o;
- for (key in f.formData) {
- s += p + t + o;
- s += 'Content-Disposition: form-data; name="' + key + '"' + o + o;
- s += f.formData[key] + o;
- }
- s += p + t + p + o;
- xhr.upload.addEventListener("progress",
- function(u) {
- d.progress(u, k);
- },
- false);
- xhr.addEventListener("load",
- function(v) {
- k.uploading = false;
- var u = this.status;
- if (u == 404) {
- d.error("404_FILE_NOT_FOUND", k, l);
- } else {
- if (k.xhr.responseText != "Invalid file type.") {
- d.uploadComplete(v, k, l);
- } else {
- d.error(k.xhr.responseText, k, l);
- }
- }
- },
- false);
- var n = f.uploadScript;
- if (f.method == "get") {
- var r = b(f.formData).param();
- n += r;
- }
- xhr.open(f.method, f.uploadScript, true);
- xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + t);
- if (typeof f.onUploadFile === "function") {
- f.onUploadFile.call(g, k);
- }
- xhr.sendAsBinary(s);
- };
- j.readAsBinaryString(k);
- }
- }
- };
- d.progress = function(l, j) {
- if (b.inArray("onProgress", f.overrideEvents) < 0) {
- if (l.lengthComputable) {
- var k = Math.round((l.loaded / l.total) * 100);
- }
- j.queueItem.find(".fileinfo").html(" - " + k + "%");
- j.queueItem.find(".progress-bar").css("width", k + "%");
- }
- if (typeof f.onProgress === "function") {
- f.onProgress.call(g, j, l);
- }
- };
- d.error = function(l, j, k) {
- if (b.inArray("onError", f.overrideEvents) < 0) {
- switch (l) {
- case "404_FILE_NOT_FOUND":
- errorMsg = "404 Error";
- break;
- case "403_FORBIDDEN":
- errorMsg = "403 Forbidden";
- break;
- case "FORBIDDEN_FILE_TYPE":
- errorMsg = "Forbidden File Type";
- break;
- case "FILE_SIZE_LIMIT_EXCEEDED":
- errorMsg = "图片已超出200K,请重新上传!";
- break;
- default:
- errorMsg = "Unknown Error";
- break;
- }
- j.queueItem.addClass("error").find(".fileinfo").html(" - " + errorMsg);
- j.queueItem.find(".progress").remove();
- }
- if (typeof f.onError === "function") {
- f.onError.call(g, l, j);
- }
- j.skip = true;
- if (l == "404_FILE_NOT_FOUND") {
- d.uploads.errors++;
- } else {
- d.queue.errors++;
- }
- if (k) {
- a.upload.call(g, null, true);
- }
- };
- d.uploadComplete = function(l, j, k) {
- if (b.inArray("onUploadComplete", f.overrideEvents) < 0) {
- j.queueItem.find(".progress-bar").css("width", "100%");
- j.queueItem.find(".fileinfo").html(" - 上传成功");
- j.queueItem.find(".progress").slideUp(250);
- j.queueItem.addClass("complete");
- }
- if (typeof f.onUploadComplete === "function") {
- f.onUploadComplete.call(g, j, j.xhr.responseText);
- }
- if (f.removeCompleted) {
- setTimeout(function() {
- a.cancel.call(g, j);
- },
- 3000);
- }
- j.complete = true;
- d.uploads.successful++;
- d.uploads.count++;
- d.uploads.current--;
- delete j.xhr;
- if (k) {
- a.upload.call(g, null, true);
- }
- };
- d.queueComplete = function() {
- if (typeof f.onQueueComplete === "function") {
- f.onQueueComplete.call(g, d.uploads);
- }
- };
- if (window.File && window.FileList && window.Blob && (window.FileReader || window.FormData)) {
- f.id = "uploadifive-" + g.attr("id");
- d.button = b('<div id="' + f.id + '" class="uploadifive-button">' + f.buttonText + "</div>");
- if (f.buttonClass) {
- d.button.addClass(f.buttonClass);
- }
- d.button.css({
- height: f.height,
- "line-height": f.height + "px",
- overflow: "hidden",
- position: "relative",
- "text-align": "center",
- width: f.width
- });
- g.before(d.button).appendTo(d.button).hide();
- d.createInput.call(g);
- if (!f.queueID) {
- f.queueID = f.id + "-queue";
- d.queueEl = b('<div id="' + f.queueID + '" class="uploadifive-queue" />');
- d.button.after(d.queueEl);
- } else {
- d.queueEl = b("#" + f.queueID);
- }
- if (f.dnd) {
- var h = f.dropTarget ? b(f.dropTarget) : d.queueEl.get(0);
- h.addEventListener("dragleave",
- function(j) {
- j.preventDefault();
- j.stopPropagation();
- },
- false);
- h.addEventListener("dragenter",
- function(j) {
- j.preventDefault();
- j.stopPropagation();
- },
- false);
- h.addEventListener("dragover",
- function(j) {
- j.preventDefault();
- j.stopPropagation();
- },
- false);
- h.addEventListener("drop", d.drop, false);
- }
- if (!XMLHttpRequest.prototype.sendAsBinary) {
- XMLHttpRequest.prototype.sendAsBinary = function(k) {
- function l(n) {
- return n.charCodeAt(0) & 255;
- }
- var m = Array.prototype.map.call(k, l);
- var j = new Uint8Array(m);
- this.send(j.buffer);
- };
- }
- if (typeof f.onInit === "function") {
- f.onInit.call(g);
- }
- } else {
- if (typeof f.onFallback === "function") {
- f.onFallback.call(g);
- }
- return false;
- }
- });
- },
- debug: function() {
- return this.each(function() {
- console.log(b(this).data("uploadifive"));
- });
- },
- clearQueue: function() {
- this.each(function() {
- var f = b(this),
- c = f.data("uploadifive"),
- e = c.settings;
- for (var d in c.inputs) {
- input = c.inputs[d];
- limit = input.files.length;
- for (i = 0; i < limit; i++) {
- file = input.files[i];
- a.cancel.call(f, file);
- }
- }
- if (typeof e.onClearQueue === "function") {
- e.onClearQueue.call(f, b("#" + c.settings.queueID));
- }
- });
- },
- cancel: function(d, c) {
- this.each(function() {
- var g = b(this),
- e = g.data("uploadifive"),
- f = e.settings;
- if (typeof d === "string") {
- if (!isNaN(d)) {
- fileID = "uploadifive-" + b(this).attr("id") + "-file-" + d;
- }
- d = b("#" + fileID).data("file");
- }
- d.skip = true;
- e.filesCancelled++;
- if (d.uploading) {
- e.uploads.current--;
- d.uploading = false;
- d.xhr.abort();
- delete d.xhr;
- a.upload.call(g);
- }
- if (b.inArray("onCancel", f.overrideEvents) < 0) {
- e.removeQueueItem(d, c);
- }
- if (typeof f.onCancel === "function") {
- f.onCancel.call(g, d);
- }
- });
- },
- upload: function(c, d) {
- this.each(function() {
- var h = b(this),
- e = h.data("uploadifive"),
- f = e.settings;
- if (c) {
- e.uploadFile.call(h, c);
- } else {
- if ((e.uploads.count + e.uploads.current) < f.uploadLimit || f.uploadLimit == 0) {
- if (!d) {
- e.uploads.attempted = 0;
- e.uploads.successsful = 0;
- e.uploads.errors = 0;
- var g = e.filesToUpload();
- if (typeof f.onUpload === "function") {
- f.onUpload.call(h, g);
- }
- }
- b("#" + f.queueID).find(".uploadifive-queue-item").not(".error, .complete").each(function() {
- _file = b(this).data("file");
- if ((e.uploads.current >= f.simUploadLimit && f.simUploadLimit !== 0) || (e.uploads.current >= f.uploadLimit && f.uploadLimit !== 0) || (e.uploads.count >= f.uploadLimit && f.uploadLimit !== 0)) {
- return false;
- }
- if (f.checkScript) {
- _file.checking = true;
- skipFile = e.checkExists(_file);
- _file.checking = false;
- if (!skipFile) {
- e.uploadFile(_file, true);
- }
- } else {
- e.uploadFile(_file, true);
- }
- });
- if (b("#" + f.queueID).find(".uploadifive-queue-item").not(".error, .complete").size() == 0) {
- e.queueComplete();
- }
- } else {
- if (e.uploads.current == 0) {
- if (b.inArray("onError", f.overrideEvents) < 0) {
- if (e.filesToUpload() > 0 && f.uploadLimit != 0) {
- alert("The maximum upload limit has been reached.");
- }
- }
- if (typeof f.onError === "function") {
- f.onError.call(h, "UPLOAD_LIMIT_EXCEEDED", e.filesToUpload());
- }
- }
- }
- }
- });
- },
- destroy: function() {
- this.each(function() {
- var e = b(this),
- c = e.data("uploadifive"),
- d = c.settings;
- a.clearQueue.call(e);
- if (!d.queueID) {
- b("#" + d.queueID).remove();
- }
- e.siblings("input").remove();
- e.show().insertBefore(c.button);
- c.button.remove();
- if (typeof d.onDestroy === "function") {
- d.onDestroy.call(e);
- }
- });
- }
- };
- b.fn.uploadifive = function(c) {
- if (a[c]) {
- return a[c].apply(this, Array.prototype.slice.call(arguments, 1));
- } else {
- if (typeof c === "object" || !c) {
- return a.init.apply(this, arguments);
- } else {
- b.error("The method " + c + " does not exist in $.uploadify");
- }
- }
- };
- })(jQuery);
- <script type="text/javascript">
- <%
- randomize
- ranNum=int(90000*rnd)+10000
- %>
- $(function() {
- $('#file_upload').uploadifive({
- 'auto' : true,
- 'multi' : false,
- 'buttonText' :'选择图片',
- 'removeCompleted' : true,
- 'fileSizeLimit' : '200KB',
- 'formData' : {
- 'timestamp' : '<%= ranNum %>',
- 'token' : '<%= md5("unique_salt"&ranNum)%>'
- },
- 'queueID' : 'queue',
- 'uploadScript' : 'uploadifive.asp',
- 'onUploadComplete' : function(file, data) {var obj=JSON.parse(data); $('.filename').val(obj.filename);}
- });
- });
- </script>
仅供参考