У меня есть основной MVC-проект asp.net, где я использую пакет blueimp-file-upload из здесь для загрузки больших файлов. Пакет поставляется с jquery.fileupload-ui.js, где реализованы обратные вызовы add, send, done, fail и т. Д.
Но мне нужно сделать дополнительные вещи в обратных вызовах add и done для вызова метода Web API. Я смог сделать это только путем повторной реализации обратных вызовов на моей странице MVC, которая имеет вызов API, а также исходный код обратного вызова в jquery.fileupload-ui.js.
Есть ли такая альтернатива? Мне не нужно управлять кодом, который копируется из оригинальной функции обратного вызова? Спасибо!
Например, ниже приведен обратный вызов для завершения, когда я добавил вызов API.
done: function (e, data) {
//This is my API call
var additionalData = {
FileHandle: data.files[0].name,
Request: '@Model.Request'
};
$.ajax({
url: 'UploadAPI/Complete',
method: 'POST',
dataType: 'json',
data: additionalData,
success: function (result) {
}
});
//Below is copied from the original callback implementation.
if (e.isDefaultPrevented()) {
return false;
}
var that =
$(this).data('blueimp-fileupload') || $(this).data('fileupload'),
getFilesFromResponse =
data.getFilesFromResponse || that.options.getFilesFromResponse,
files = getFilesFromResponse(data),
template,
deferred;
if (data.context) {
data.context.each(function(index) {
var file = files[index] || { error: 'Empty file upload result' };
deferred = that._addFinishedDeferreds();
that._transition($(this)).done(function() {
var node = $(this);
template = that._renderDownload([file]).replaceAll(node);
that._forceReflow(template);
that._transition(template).done(function() {
data.context = $(this);
that._trigger('completed', e, data);
that._trigger('finished', e, data);
deferred.resolve();
});
});
});
} else {
template = that
._renderDownload(files)
[that.options.prependFiles ? 'prependTo' : 'appendTo'](
that.options.filesContainer
);
that._forceReflow(template);
deferred = that._addFinishedDeferreds();
that._transition(template).done(function() {
data.context = $(this);
that._trigger('completed', e, data);
that._trigger('finished', e, data);
deferred.resolve();
});
}
}