Скрипт немного сокращен отсутствуют инит моменты но сама суть понятна должна быть
CODE (javascript):
скопировать код в буфер обмена
скопировать код в буфер обмена
- (function($) {
- self._damnUploaderUploadItem = function(url, item) {
- if (!checkIsFile(item.file)) {
- return false;
- }
- var xhr = new XMLHttpRequest();
- var progress = 0;
- var uploaded = false;
- if (xhr.upload) {
- xhr.upload.addEventListener("progress", function(e) {
- if (e.lengthComputable) {
- progress = (e.loaded * 100) / e.total;
- if ($.isFunction(item.onProgress)) {
- item.onProgress.call(item, Math.round(progress));
- }
- }
- }, false);
- xhr.upload.addEventListener("load", function(e){
- progress = 100;
- uploaded = true;
- }, false);
- } else {
- uploaded = true;
- }
- xhr.onreadystatechange = function () {
- var callbackDefined = $.isFunction(item.onComplete);
- if (this.readyState == 4) {
- item.cancelled = item.cancelled || false;
- if (this.status < 400) {
- if (!uploaded) {
- if (callbackDefined) {
- item.onComplete.call(item, false, null, 0);
- }
- } else {
- if ($.isFunction(item.onProgress)) {
- item.onProgress.call(item, 100);
- }
- if (callbackDefined) {
- item.onComplete.call(item, true, this.responseText);
- }
- }
- } else {
- if (callbackDefined) {
- item.onComplete.call(item, false, null, this.status);
- }
- }
- }
- };
- var filename = item.replaceName || item.file.name;
- xhr.open("POST", url);
- if ($.support.fileSending) {
- var cnt=count(queue);
- var formData = new FormData();
- formData.append((item.fieldName || 'file'), item.file);
- xhr.send(formData);
- } else if ($.support.fileReading && xhr.sendAsBinary) {
- var boundary = "xxxxxxxxx";
- var body = "--" + boundary + "\r\n";
- filename = unescape(encodeURIComponent(filename));
- body += "Content-Disposition: form-data; name='"+(item.fieldName || 'file')+"'; filename='" + filename + "'\r\n";
- body += "Content-Type: application/octet-stream\r\n\r\n";
- body += (item.file.getAsBinary ? item.file.getAsBinary() : item.file.readAsBinary()) + "\r\n";
- body += "--" + boundary + "--";
- xhr.sendAsBinary(body);
- } else {
- xhr.setRequestHeader('Upload-Filename', item.file.name);
- xhr.setRequestHeader('Upload-Size', item.file.size);
- xhr.setRequestHeader('Upload-Type', item.file.type);
- xhr.send(item.file);
- }
- item.xhr = xhr;
- }
- var isFileField = ((self.get(0).tagName == 'INPUT') && (this.attr('type') == 'file'));
- if (isFileField) {
- var myName = self.eq(0).attr('name');
- if (!$.support.fileSelecting) {
- if (myName.charAt(myName.length-1) != ']') {
- myName += '[]';
- }
- self.attr('name', myName);
- self.attr('multiple', false);
- var action = self.parents('form').attr('action');
- self._damnUploaderFakeForm = $('<form/>').attr({
- method: 'post',
- enctype: 'multipart/form-data',
- action: action
- }).hide().appendTo('body');
- } else {
- self.attr('multiple', true);
- }
- self._damnUploaderChangeCallback = function() {
- self._damnUploaderFilesAddMap($.support.fileSelecting ? this.files : this, set.onSelect);
- };
- self.on({
- change: self._damnUploaderChangeCallback
- });
- }
- if (set.dropping) {
- self.on({
- drop: function(e) {
- self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
- return false;
- }
- });
- if (set.dropBox) {
- $(set.dropBox).on({
- drop: function(e) {
- self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
- return false;
- }
- });
- }
- }
- return self;
- }
- switch(params) {
- case 'addItem':
- if (!data) {
- return false;
- }
- var queueId = uniq(5);
- if (data.file.fake) {
- var input = $(data.file.inputElement);
- var cloned = $(input).clone();
- $(input).before(cloned);
- $(input).attr('id', queueId);
- $(input).appendTo(self._damnUploaderFakeForm);
- cloned.on({
- change: self._damnUploaderChangeCallback
- });
- self._damnUploaderItemsCount++;
- return queueId;
- }
- if (!checkIsFile(data.file)) {
- return false;
- }
- queue[queueId] = data;
- self._damnUploaderItemsCount++;
- return queueId;
- break;
- case 'startUpload':
- if (!set.url) {
- return self;
- }
- if (!$.support.fileSelecting) {
- self._damnUploaderFakeForm.submit();
- return self;
- }
- var i =0;
- var complete_one = false;
- $.each(queue, function(queueId, item) {
- var compl = item.onComplete;
- item.fieldName = item.fieldName || set.fieldName;
- item.onComplete = function (successful, data, error) {
- if (!this.cancelled) {
- delete queue[queueId];
- self._damnUploaderItemsCount--;
- }
- if ($.isFunction(compl)) {
- compl.call(this, successful, data, error);
- }
- if ((self._damnUploaderItemsCount == 0) && ($.isFunction(set.onAllComplete))) {
- set.onAllComplete.call(self, data);
- }
- };
- self._damnUploaderUploadItem(set.url, item);
- });
- break;
- }