Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

- Added multiple file selection support for browsers which support th…

…e "multiple" attribute on file input fields and provide a files attribute for the selected files (File API), but provide no XHR file upload capability (Opera 11.10).

- Updated preview image loader to support multiple preview images in one upload row and added the handler parameter to the parseResponse method (jQuery File Upload UI).
- Updated Example Code to fully support the multiFileRequest option as well as iFrame based file uploads with multiple selected files.
- Removed the requirement to define url, uploadDir and thumbnailsDir from the client-side example code. Urls are supposed to be generated on server-side and exposed via JSON.
- Moved the code to load existing files out of the Extended UI Plugin into the example JS file.
  • Loading branch information...
commit 27dd778fac7701ee9137c3693265095c290f6d29 1 parent 5ee5f18
@blueimp authored
View
9 README.md
@@ -43,11 +43,12 @@
* Google Chrome - 7.0, 8.0, 9.0, 10.0
* Apple Safari - 5.0 ¹
* Mozilla Firefox - 3.6, 4.0
-* Opera - 10.6 ², 11.0 ², 11.1 ²
-* Microsoft Internet Explorer 6.0 ², 7.0 ², 8.0 ², 9.0 ²
+* Opera - 10.6, 11.0, 11.1 ²
+* Microsoft Internet Explorer 6.0, 7.0, 8.0, 9.0 ³
-¹ Drag & Drop is not supported on the Windows version of Safari.
-² MSIE and Opera have no support for Drag & Drop, multiple file selection or individual upload progress indication.
+¹ Drag & Drop is not supported on the Windows version of Safari.
+² Opera has no suppport for Drag & Drop or upload progress, but support for multiple file selection since version 11.1.
+³ MSIE has no support for Drag & Drop, multiple file selection or upload progress.
## License
Released under the [MIT license](http://creativecommons.org/licenses/MIT/).
View
7 README.txt
@@ -48,10 +48,11 @@ Browser Support (tested versions)
- Google Chrome - 7.0, 8.0, 9.0, 10.0
- Apple Safari - 5.0 ¹
- Mozilla Firefox - 3.6, 4.0
- - Opera - 10.6 ², 11.0 ², 11.1 ²
- - Microsoft Internet Explorer 6.0 ², 7.0 ², 8.0 ², 9.0 ²
+ - Opera - 10.6, 11.0, 11.1 ²
+ - Microsoft Internet Explorer 6.0, 7.0, 8.0, 9.0 ³
¹ Drag & Drop is not supported on the Windows version of Safari.
-² MSIE and Opera have no support for Drag & Drop, multiple file selection or individual upload progress indication.
+² Opera has no suppport for Drag & Drop or upload progress, but support for multiple file selection since version 11.1.
+³ MSIE has no support for Drag & Drop, multiple file selection or upload progress.
License
-------
View
20 example/application.js
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload Plugin JS Example 4.3.2
+ * jQuery File Upload Plugin JS Example 4.4
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -12,20 +12,24 @@
/*global $ */
$(function () {
+ // Initialize jQuery File Upload (Extended User Interface Version):
$('#file_upload').fileUploadUIX({
- // The url to the upload handler script (required):
- url: 'upload.php',
- // The url path to the uploaded files directory (required):
- uploadDir: 'files/',
- // The url path to the thumbnail pictures directory (required):
- thumbnailsDir: 'thumbnails/',
// Wait for user interaction before starting uploads:
autoUpload: false,
- // Blob size setting for chunked uploads (remove or set to null to disable):
+ // Upload bigger files in chunks of 10 MB (remove or set to null to disable):
maxChunkSize: 10000000,
// Request uploaded filesize prior upload and upload remaining bytes:
continueAbortedUploads: true,
// Open download dialogs via iframes, to prevent aborting current uploads:
forceIframeDownload: true
});
+
+ // Load existing files:
+ $.getJSON($('#file_upload').fileUploadUIX('option', 'url'), function (files) {
+ var fileUploadOptions = $('#file_upload').fileUploadUIX('option');
+ $.each(files, function (index, file) {
+ fileUploadOptions.buildDownloadRow(file, fileUploadOptions)
+ .appendTo(fileUploadOptions.downloadTable).fadeIn();
+ });
+ });
});
View
6 example/index.html
@@ -1,7 +1,7 @@
<!DOCTYPE HTML>
<!--
/*
- * jQuery File Upload Plugin HTML Example 4.1
+ * jQuery File Upload Plugin HTML Example 4.1.1
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -21,8 +21,8 @@
</head>
<body>
<div id="file_upload">
- <form action="." method="POST" enctype="multipart/form-data">
- <input type="file" name="file" multiple>
+ <form action="upload.php" method="POST" enctype="multipart/form-data">
+ <input type="file" name="file[]" multiple>
<button type="submit">Upload</button>
<div class="file_upload_label">Upload files</div>
</form>
View
90 example/jquery.fileupload-uix.js
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload User Interface Extended Plugin 4.3.2
+ * jQuery File Upload User Interface Extended Plugin 4.4
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -47,7 +47,7 @@
UploadHandler = function (container, options) {
var uploadHandler = this;
- this.uploadDir = this.thumbnailsDir = null;
+ this.url = container.find('form:first').attr('action');
this.autoUpload = true;
this.continueAbortedUploads = false;
this.forceIframeDownload = false;
@@ -89,14 +89,31 @@
});
};
+ this.buildMultiUploadRow = function (files, handler) {
+ var rows = $('<tbody style="display:none;"/>');
+ $.each(files, function (index, file) {
+ var row = handler.buildUploadRow(files, index, handler).show(),
+ cells = row.find(
+ '.file_upload_progress, .file_upload_start, .file_upload_cancel'
+ );
+ if (index) {
+ cells.remove();
+ } else {
+ cells.attr('rowspan', files.length);
+ }
+ rows.append(row);
+ });
+ return rows;
+ };
+
this.buildUploadRow = function (files, index, handler) {
+ if (typeof index !== 'number') {
+ return handler.buildMultiUploadRow(files, handler);
+ }
var file = files[index],
fileName = handler.formatFileName(file.name),
uploadRow = handler.uploadTemplate
.clone().removeAttr('id');
- uploadRow.attr('data-name', file.name);
- uploadRow.attr('data-size', file.size);
- uploadRow.attr('data-type', file.type);
uploadRow.find('.file_name')
.text(fileName);
uploadRow.find('.file_size')
@@ -113,34 +130,43 @@
};
this.getFileUrl = function (file, handler) {
- return handler.uploadDir + encodeURIComponent(file.name);
+ return file.url;
};
this.getThumbnailUrl = function (file, handler) {
- return handler.thumbnailsDir + encodeURIComponent(file.name);
+ return file.thumbnail;
+ };
+
+ this.buildMultiDownloadRow = function (files, handler) {
+ var rows = $('<tbody style="display:none;"/>');
+ $.each(files, function (index, file) {
+ rows.append(handler.buildDownloadRow(file, handler).show());
+ });
+ return rows;
};
this.buildDownloadRow = function (file, handler) {
+ if ($.isArray(file)) {
+ return handler.buildMultiDownloadRow(file, handler);
+ }
var fileName = handler.formatFileName(file.name),
fileUrl = handler.getFileUrl(file, handler),
+ thumbnailUrl = handler.getThumbnailUrl(file, handler),
downloadRow = handler.downloadTemplate
.clone().removeAttr('id');
- $.each(file, function (name, value) {
- downloadRow.attr('data-' + name, value);
- });
+ downloadRow.attr('data-id', file.id || file.name);
downloadRow.find('.file_name a')
- .attr('href', fileUrl)
.text(fileName);
downloadRow.find('.file_size')
.text(handler.formatFileSize(file.size));
- if (file.thumbnail) {
+ if (thumbnailUrl) {
downloadRow.find('.file_download_preview').append(
- $('<a href="' + fileUrl + '"><img src="' +
- handler.getThumbnailUrl(file, handler) + '"/></a>')
+ $('<a/>').append($('<img/>').attr('src', thumbnailUrl || null))
);
downloadRow.find('a').attr('target', '_blank');
}
downloadRow.find('a')
+ .attr('href', fileUrl || null)
.each(handler.enableDragToDesktop);
downloadRow.find('.file_download_delete button')
.button({icons: {primary: 'ui-icon-trash'}, text: false});
@@ -160,16 +186,20 @@
};
this.continueUploadCallBack = function (event, files, index, xhr, handler, callBack) {
- $.getJSON(
- handler.url,
- {file: handler.uploadRow.attr('data-name')},
- function (file) {
- if (file && file.size !== files[index].size) {
- handler.uploadedBytes = file.size;
+ if (typeof index !== 'undefined') {
+ $.getJSON(
+ handler.url,
+ {file: files[index].name},
+ function (file) {
+ if (file && file.size !== files[index].size) {
+ handler.uploadedBytes = file.size;
+ }
+ handler.uploadCallBack(event, files, index, xhr, handler, callBack);
}
- handler.uploadCallBack(event, files, index, xhr, handler, callBack);
- }
- );
+ );
+ } else {
+ handler.uploadCallBack(event, files, index, xhr, handler, callBack);
+ }
};
this.beforeSend = function (event, files, index, xhr, handler, callBack) {
@@ -199,7 +229,7 @@
var row = $(this).closest('tr');
$.ajax({
url: uploadHandler.url + '?file=' + encodeURIComponent(
- row.attr('data-id') || row.attr('data-name')
+ row.attr('data-id')
),
type: 'DELETE',
success: function () {
@@ -237,22 +267,10 @@
});
};
- this.loadFiles = function () {
- $.getJSON(uploadHandler.url, function (files) {
- $.each(files, function (index, file) {
- uploadHandler.buildDownloadRow(file, uploadHandler)
- .appendTo(uploadHandler.downloadTable).fadeIn();
- });
- });
- };
-
this.initExtended = function () {
uploadHandler.initDownloadHandler();
uploadHandler.initDeleteHandler();
uploadHandler.initMultiButtons();
- if (uploadHandler.loadFiles) {
- uploadHandler.loadFiles();
- }
};
this.destroyExtended = function () {
View
122 example/upload.php
@@ -1,6 +1,6 @@
<?php
/*
- * jQuery File Upload Plugin PHP Example 4.1.1
+ * jQuery File Upload Plugin PHP Example 4.2
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -13,9 +13,16 @@
error_reporting(E_ALL | E_STRICT);
$script_dir = dirname(__FILE__);
-$upload_dir = $script_dir.'/files/';
-$thumbnails_dir = $script_dir.'/thumbnails/';
-$thumbnail_max_width = $thumbnail_max_height = 80;
+$script_dir_url = dirname($_SERVER['PHP_SELF']);
+$options = array(
+ 'upload_dir' => $script_dir.'/files/',
+ 'upload_url' => $script_dir_url.'/files/',
+ 'thumbnails_dir' => $script_dir.'/thumbnails/',
+ 'thumbnails_url' => $script_dir_url.'/thumbnails/',
+ 'thumbnail_max_width' => 80,
+ 'thumbnail_max_height' => 80,
+ 'field_name' => 'file'
+);
class UploadHandler
{
@@ -23,27 +30,33 @@ class UploadHandler
private $thumbnails_dir;
private $thumbnail_max_width;
private $thumbnail_max_height;
+ private $field_name;
- function __construct($upload_dir, $thumbnails_dir, $thumbnail_max_width, $thumbnail_max_height) {
- $this->upload_dir = $upload_dir;
- $this->thumbnails_dir = $thumbnails_dir;
- $this->thumbnail_max_width = $thumbnail_max_width;
- $this->thumbnail_max_height = $thumbnail_max_height;
+ function __construct($options) {
+ $this->upload_dir = $options['upload_dir'];
+ $this->upload_url = $options['upload_url'];
+ $this->thumbnails_dir = $options['thumbnails_dir'];
+ $this->thumbnails_url = $options['thumbnails_url'];
+ $this->thumbnail_max_width = $options['thumbnail_max_width'];
+ $this->thumbnail_max_height = $options['thumbnail_max_height'];
+ $this->field_name = $options['field_name'];
}
- private function get_file_object ($file_name) {
+ private function get_file_object($file_name) {
$file_path = $this->upload_dir.$file_name;
if (is_file($file_path) && $file_name[0] !== '.') {
$file = new stdClass();
$file->name = $file_name;
$file->size = filesize($file_path);
- $file->thumbnail = is_file($this->thumbnails_dir.$file_name);
+ $file->url = $this->upload_url.rawurlencode($file->name);
+ $file->thumbnail = is_file($this->thumbnails_dir.$file_name) ?
+ $this->thumbnails_url.rawurlencode($file->name) : null;
return $file;
}
return null;
}
- private function create_thumbnail ($file_name) {
+ private function create_thumbnail($file_name) {
$file_path = $this->upload_dir.$file_name;
$thumbnail_path = $this->thumbnails_dir.$file_name;
list($img_width, $img_height) = @getimagesize($file_path);
@@ -92,29 +105,10 @@ private function create_thumbnail ($file_name) {
return $success;
}
- public function get () {
- $file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null;
- if ($file_name) {
- $info = $this->get_file_object($file_name);
- } else {
- $info = array_values(array_filter(array_map(
- array($this, 'get_file_object'),
- scandir($this->upload_dir)
- )));
- }
- header('Cache-Control: no-cache, must-revalidate');
- header('Content-type: application/json');
- echo json_encode($info);
- }
-
- public function post () {
- $file_request = isset($_FILES['file']) ? $_FILES['file'] : null;
- $uploaded_file = $file_request ? $file_request['tmp_name'] : null;
+ private function handle_file_upload($uploaded_file, $name, $size, $type) {
$file = new stdClass();
- $file->name = basename(isset($_SERVER['HTTP_X_FILE_NAME']) ?
- $_SERVER['HTTP_X_FILE_NAME'] : $file_request['name']);
- $file->size = intval(isset($_SERVER['HTTP_X_FILE_SIZE']) ?
- $_SERVER['HTTP_X_FILE_SIZE'] : $file_request['size']);
+ $file->name = basename($name);
+ $file->size = intval($size);
if ($file->name[0] === '.') {
$file->name = substr($file->name, 1);
}
@@ -143,18 +137,70 @@ public function post () {
}
$file_size = filesize($file_path);
if ($file_size === $file->size) {
- $file->thumbnail = $this->create_thumbnail($file->name);
+ $file->url = $this->upload_url.rawurlencode($file->name);
+ $file->thumbnail = $this->create_thumbnail($file->name) ?
+ $this->thumbnails_url.rawurlencode($file->name) : null;
}
$file->size = $file_size;
}
+ return $file;
+ }
+
+ public function get() {
+ $file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null;
+ if ($file_name) {
+ $info = $this->get_file_object($file_name);
+ } else {
+ $info = array_values(array_filter(array_map(
+ array($this, 'get_file_object'),
+ scandir($this->upload_dir)
+ )));
+ }
+ header('Cache-Control: no-cache, must-revalidate');
+ header('Content-type: application/json');
+ echo json_encode($info);
+ }
+
+ public function post() {
+ if (isset($_FILES[$this->field_name])) {
+ $upload = $_FILES[$this->field_name];
+ if (is_array($upload['name'])) {
+ $info = array();
+ foreach ($upload['name'] as $index => $value) {
+ $info[] = $this->handle_file_upload(
+ $upload['tmp_name'][$index],
+ $upload['name'][$index],
+ $upload['size'][$index],
+ $upload['type'][$index]
+ );
+ }
+ if (count($info) === 1) {
+ $info = $info[0];
+ }
+ } else {
+ $info = $this->handle_file_upload(
+ $upload['tmp_name'],
+ isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] :
+ $upload['name'],
+ isset($_SERVER['HTTP_X_FILE_SIZE']) ? $_SERVER['HTTP_X_FILE_SIZE'] :
+ $upload['size'],
+ isset($_SERVER['HTTP_X_FILE_TYPE']) ? $_SERVER['HTTP_X_FILE_TYPE'] :
+ $upload['type']
+ );
+ }
+ } else {
+ $info = null;
+ }
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
header('Content-type: application/json');
+ } else {
+ header('Content-type: text/plain');
}
- echo json_encode($file);
+ echo json_encode($info);
}
- public function delete () {
+ public function delete() {
$file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null;
$file_path = $this->upload_dir.$file_name;
$thumbnail_path = $this->thumbnails_dir.$file_name;
@@ -167,7 +213,7 @@ public function delete () {
}
}
-$upload_handler = new UploadHandler($upload_dir, $thumbnails_dir, $thumbnail_max_width, $thumbnail_max_height);
+$upload_handler = new UploadHandler($options);
switch ($_SERVER['REQUEST_METHOD']) {
case 'HEAD':
View
60 jquery.fileupload-ui.js
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload User Interface Plugin 4.3
+ * jQuery File Upload User Interface Plugin 4.3.1
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -129,7 +129,7 @@
};
this.addNode = function (parentNode, node, callBack) {
- if (parentNode && node) {
+ if (parentNode && parentNode.length && node && node.length) {
node.css('display', 'none').appendTo(parentNode).fadeIn(function () {
if (typeof callBack === func) {
try {
@@ -147,7 +147,7 @@
};
this.removeNode = function (node, callBack) {
- if (node) {
+ if (node && node.length) {
node.fadeOut(function () {
node.remove();
if (typeof callBack === func) {
@@ -305,6 +305,30 @@
uploadHandler.destroyProgressBar(uploadHandler.progressbarAll);
};
+ this.loadPreviewImage = function (files, index, handler) {
+ index = index || 0;
+ handler.uploadRow.find(handler.previewSelector).each(function () {
+ var previewNode = $(this),
+ file = files[index];
+ setTimeout(function () {
+ handler.loadImage(
+ file,
+ function (img) {
+ handler.addNode(
+ previewNode,
+ $(img)
+ );
+ },
+ handler.previewMaxWidth,
+ handler.previewMaxHeight,
+ handler.imageTypes,
+ !handler.previewAsCanvas
+ );
+ }, handler.previewLoadDelay);
+ index += 1;
+ });
+ };
+
this.initUploadRow = function (event, files, index, xhr, handler) {
var uploadRow = handler.uploadRow = (typeof handler.buildUploadRow === func ?
handler.buildUploadRow(files, index, handler) : null);
@@ -317,27 +341,7 @@
handler.cancelUpload(e, files, index, xhr, handler);
e.preventDefault();
});
- uploadRow.find(handler.previewSelector).each(function () {
- var previewNode = $(this),
- file = files[index];
- if (file) {
- setTimeout(function () {
- handler.loadImage(
- file,
- function (img) {
- handler.addNode(
- previewNode,
- $(img)
- );
- },
- handler.previewMaxWidth,
- handler.previewMaxHeight,
- handler.imageTypes,
- !handler.previewAsCanvas
- );
- }, handler.previewLoadDelay);
- }
- });
+ handler.loadPreviewImage(files, index, handler);
}
};
@@ -357,7 +361,7 @@
handler.initUploadProgressAll();
};
- this.parseResponse = function (xhr) {
+ this.parseResponse = function (xhr, handler) {
if (typeof xhr.responseText !== undef) {
return $.parseJSON(xhr.responseText);
} else {
@@ -369,9 +373,7 @@
this.initDownloadRow = function (event, files, index, xhr, handler) {
var json, downloadRow;
try {
- json = handler.response = handler.parseResponse(xhr);
- downloadRow = handler.downloadRow = (typeof handler.buildDownloadRow === func ?
- handler.buildDownloadRow(json, handler) : null);
+ json = handler.response = handler.parseResponse(xhr, handler);
} catch (e) {
if (typeof handler.onError === func) {
handler.originalEvent = event;
@@ -380,6 +382,8 @@
throw e;
}
}
+ downloadRow = handler.downloadRow = (typeof handler.buildDownloadRow === func ?
+ handler.buildDownloadRow(json, handler) : null);
};
this.onLoad = function (event, files, index, xhr, handler) {
View
37 jquery.fileupload.js
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload Plugin 4.3
+ * jQuery File Upload Plugin 4.3.1
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -532,8 +532,16 @@
},
handleLegacyGlobalProgress = function (event, files, index, iframe, settings) {
- var total = files[index].size ? files[index].size : 1,
- progressEvent = createProgressEvent(true, total, total);
+ var total = 0,
+ progressEvent;
+ if (typeof index === undef) {
+ $.each(files, function (index, file) {
+ total += file.size ? file.size : 1;
+ });
+ } else {
+ total = files[index].size ? files[index].size : 1;
+ }
+ progressEvent = createProgressEvent(true, total, total);
settings.progressLoaded = total;
handleGlobalProgress(progressEvent, files, index, iframe, settings);
},
@@ -563,12 +571,12 @@
form.find('.' + settings.namespace + '_form_data').remove();
},
- legacyUpload = function (event, files, input, form, iframe, settings) {
+ legacyUpload = function (event, files, input, form, iframe, settings, index) {
var send;
- if (typeof settings.onSend === func && settings.onSend(event, files, 0, iframe, settings) === false) {
+ if (typeof settings.onSend === func && settings.onSend(event, files, index, iframe, settings) === false) {
return;
}
- multiLoader.push([files, 0, iframe, settings]);
+ multiLoader.push([files, index, iframe, settings]);
send = function () {
var originalAction = form.attr('action'),
originalMethod = form.attr('method'),
@@ -580,9 +588,9 @@
// javascript:false as iframe src prevents warning popups on HTTPS in IE6
// concat is used here to prevent the "Script URL" JSLint error:
iframe.unbind('load').attr('src', 'javascript'.concat(':false;'));
- handleLegacyGlobalProgress(e, files, 0, iframe, settings);
+ handleLegacyGlobalProgress(e, files, index, iframe, settings);
if (typeof settings.onAbort === func) {
- settings.onAbort(e, files, 0, iframe, settings);
+ settings.onAbort(e, files, index, iframe, settings);
}
multiLoader.complete();
sequenceHandler.next();
@@ -590,9 +598,9 @@
.unbind('load')
.bind('load', function (e) {
iframe.readyState = 4;
- handleLegacyGlobalProgress(e, files, 0, iframe, settings);
+ handleLegacyGlobalProgress(e, files, index, iframe, settings);
if (typeof settings.onLoad === func) {
- settings.onLoad(e, files, 0, iframe, settings);
+ settings.onLoad(e, files, index, iframe, settings);
}
multiLoader.complete();
sequenceHandler.next();
@@ -621,13 +629,14 @@
}
},
- handleLegacyUpload = function (event, input, form) {
+ handleLegacyUpload = function (event, input, form, index) {
// javascript:false as iframe src prevents warning popups on HTTPS in IE6:
var iframe = $('<iframe src="javascript:false;" style="display:none;" name="iframe_' +
settings.namespace + '_' + (new Date()).getTime() + '"></iframe>'),
uploadSettings = $.extend({}, settings),
files = event.target.files;
files = files ? Array.prototype.slice.call(files, 0) : [{name: input.val(), type: null, size: null}];
+ index = files.length === 1 ? 0 : index;
uploadSettings.fileInput = input;
uploadSettings.uploadForm = form;
iframe.readyState = 0;
@@ -640,15 +649,15 @@
uploadSettings.initUpload(
event,
files,
- 0,
+ index,
iframe,
uploadSettings,
function () {
- legacyUpload(event, files, input, form, iframe, uploadSettings);
+ legacyUpload(event, files, input, form, iframe, uploadSettings, index);
}
);
} else {
- legacyUpload(event, files, input, form, iframe, uploadSettings);
+ legacyUpload(event, files, input, form, iframe, uploadSettings, index);
}
}).appendTo(form);
},
Please sign in to comment.
Something went wrong with that request. Please try again.