Jquery Blueimp文件上传,您如何知道进度回调用于哪个文件?

Jquery Blueimp文件上传,您如何知道进度回调用于哪个文件?,jquery,file-upload,blueimp,Jquery,File Upload,Blueimp,您如何知道进度回调是针对哪个文件的? 尽管我将sequentialUploads设置为true,但仅在IE10中(不是Chrome/FireFox/Safari),当我同时选择多个文件进行上载时,add回调中的data.files数组包含多个文件。对于所有其他浏览器,每个文件调用一次add回调,数组总是只有一个文件 所以我做了一个for循环来处理add回调中的每个文件,没有问题 但是,现在我正在更新进度回调,我看不到任何方法可以知道进度是针对哪个文件的。回调函数得到两个参数,“e”和“data”

您如何知道进度回调是针对哪个文件的?

尽管我将sequentialUploads设置为true,但仅在IE10中(不是Chrome/FireFox/Safari),当我同时选择多个文件进行上载时,add回调中的data.files数组包含多个文件。对于所有其他浏览器,每个文件调用一次add回调,数组总是只有一个文件

所以我做了一个for循环来处理add回调中的每个文件,没有问题

但是,现在我正在更新进度回调,我看不到任何方法可以知道进度是针对哪个文件的。回调函数得到两个参数,“e”和“data”,数据对象已经加载了总值,这些值给出了进度。。。但是哪个文件?一些处理回调有data.index来告诉您它是哪个文件,但上载进度没有这个

这只是缺少功能,还是我缺少了什么

我的代码现在有点难看,因为我正试图解决这些新的IE10问题。在此之前,我只指望data.files数组始终只有一项。这是我的代码,如果有机会,我会尝试清理它:

self.initFileUpload = function(elem) {
         $(elem).fileupload({
             dataType: 'json',
             global: false,
             sequentialUploads: true,
             forceIframeTransport: !!ie,
             formData: { hostSID: app.viewModels.main.hostSID() },
             done: function(e, data) {
                 for (var x = 0; x < data.result.files.length; x++) {
                     var file = data.result.files[x];
                     var u = file.myObj;
                     u.sid = file.sid;
                     console.log("done: " + u.filename);
                     u.done(true);
                 }
             },
             add: function(e, data) {
                 for (var x = 0; x < data.files.length; x++) {
                     var file = data.files[x];
                     var u = [];
                     u.filename = file.name;
                     u.size = file.size;
                     u.perc = ko.observable(0);
                     u.error = ko.observable("");
                     u.done = ko.observable(false);
                     var ext = file.name.split('.').pop().toLowerCase();
                     u.image = utils.isImageExt(ext);
                     self.uploads.push(u);
                     file.myObj = u;
                     u.jqXHR = data.submit();
                 }
             },
             fail: function(e, data) {
                 for (var x = 0; x < data.result.files.length; x++) {
                     var file = data.result.files[x];
                     var u = file.myObj;
                     if (data.jqXHR && data.jqXHR.responseText)
                         u.error(data.jqXHR.responseText);
                     else
                         u.error("Unknown Error");
                     console.log("fail: " + u.filename);
                 }
             },
             progress: function(e, data) {
                 console.log(e);
                 console.log(data);
                 for (var x = 0; x < data.files.length; x++) {
                     var file = data.files[x];
                     console.log(file);
                     var u = file.myObj;
                     u.perc(parseInt(file.loaded / file.total * 100, 10));
                     console.log("perc: " + u.filename + " " + u.perc());
                 }
             },
             progressall: function(e, data) {
                 self.uploadPerc(parseInt(data.loaded / data.total * 100, 10));
             }
         });
     }
self.initFileUpload=函数(elem){
$(elem).fileupload({
数据类型:“json”,
全球:错,
顺序上传:正确,
forceIframeTransport:!!即,
formData:{hostSID:app.viewModels.main.hostSID()},
完成:功能(e,数据){
对于(var x=0;x
fileuploadprogress回调包含data.context。这是您可能在“fileuploadadd”回调中创建的标记的jquery对象

您可以在“fileuploadadd”回调中添加进度元素(或提供反馈的任何其他标记),然后在“fileuploadprogress”中再次找到它并设置进度:

.on('fileuploadadd', function (e, data) {
    $.each(data.files, function (index, file) {
        data.context = $('<div/>', { class: 'pull-left text-center media_wrapper' }).appendTo('#thumbnails');
        $('<progress>', { value: '0', max: '100'}).appendTo(data.context)
    });
})
/* ... */
.on('fileuploadprogress', function (e, data) {
    if (data.context) {
        var progress = parseInt(data.loaded / data.total * 100, 10);
        data.context.find('progress').attr('value', progress);
    }
})
.on('fileuploadadd',函数(e,数据){
$.each(data.files,函数(索引,文件){
data.context=$('',{class:'拉左文本中心媒体包装器'}).appendTo('#缩略图');
$('',{value:'0',max:'100'}).appendTo(data.context)
});
})
/* ... */
.on('fileuploadprogress',函数(e,数据){
if(data.context){
var progress=parseInt(data.loaded/data.total*100,10);
data.context.find('progress').attr('value',progress);
}
})

你是不是设法弄明白了?