Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript plupload动态多部分参数,用于重新初始化时丢失的正在进行的上载_Javascript_Jquery_Upload_Plupload - Fatal编程技术网

Javascript plupload动态多部分参数,用于重新初始化时丢失的正在进行的上载

Javascript plupload动态多部分参数,用于重新初始化时丢失的正在进行的上载,javascript,jquery,upload,plupload,Javascript,Jquery,Upload,Plupload,我有一个视图,其中我初始化了一个pluploader。我可以离开这个视图,仍然允许上传完成。我遇到的问题是,每当我重新进入视图,并且仍在进行上载时,在“BeforeUpload”中为“processId”分配的最后一个多部分参数会重复使用,而不是针对每个文件单独使用 这里有一个例子: 我在视图中放置了5个文件。我离开这里。同时2个文件已完成上传进度。文件1的processId为“0123”,文件2的processId为“0124”。然后我重新进入视图。再次运行此脚本。其余文件都分配了proces

我有一个视图,其中我初始化了一个pluploader。我可以离开这个视图,仍然允许上传完成。我遇到的问题是,每当我重新进入视图,并且仍在进行上载时,在“BeforeUpload”中为“processId”分配的最后一个多部分参数会重复使用,而不是针对每个文件单独使用

这里有一个例子: 我在视图中放置了5个文件。我离开这里。同时2个文件已完成上传进度。文件1的processId为“0123”,文件2的processId为“0124”。然后我重新进入视图。再次运行此脚本。其余文件都分配了processId 0124

我确信这是因为在您进入视图的任何时候都会运行脚本,并且某些内容会被覆盖,但我还没有找到解决方案

您可以在uploader.fileAdded区域中看到,我用这一行创建了一个名为processId的int随机序列

var processId = process.createProcessId(file.index);
然后在下面的BeforeUpload中,我将该processId分配给一个multipart_参数,以便为每次上载分配一个唯一的processId

uploader.settings.multipart_params.processId        = file.processId;
脚本

/* detects when a user drags files from the desktop */
initDragDetector:function(){
    var runtimes        = ui.getUploadRunTimes();
    var tmpId           = Math.random();                

    uploader = new plupload.Uploader({
        runtimes            :runtimes,
        max_file_size       :'500mb',
        url                 :jQuery('#upSrvUrl').val(),
        drop_element        :'uploadOverlay',
        browse_button       :'uploadOverlay',
        filters : [
            {title : "Image files", extensions : "jpg,tif,png,psd"},
        ],
        max_file_count      :100,
        multipart_params    :{rnd_id:Math.random(),tmp_sid:tmpId},
        multi_selection     :true,
        file_data_name      :'upfile_0',
    });

    //INITIALIZATION HANDLER 1
    uploader.bind('Init',function(up, params){
        uploader.settings.multipart_params.mount                = jQuery('#mount').val(); 
        uploader.settings.multipart_params.publisherId          = jQuery('#publisherId').val();
        uploader.settings.multipart_params.upload_range         = 100;

        if(uploader.features.dragdrop){
            var el      = jQuery("#uploadOverlay");

            el[0].ondragover = function(event) {
                event.dataTransfer.dropEffect = "copy";
            };
            el[0].ondragenter = function(e) {
                if(e.dataTransfer.types.length < 4){
                    el.show();
                }
            };
            el[0].ondrop = function() {
                if(jQuery('.photoThumbContainer').length > 0){
                    el.hide();
                }
            };
        }
    });

    //FILES ADDED HANDLER 2 (called after a drop of files)
    uploader.bind('FilesAdded', function(up, files){
        var i = 0;
        plupload.each(files, function(file) {
            file.index = i;
            uploader.fileAdded(file);  
            i++;
        });
        uploader.start();
    });

    //inject the file into the interface (before before upload function)
    uploader.fileAdded = function(file){
        var processId           = process.createProcessId(file.index);
        //added to the file object and passed into the registration
        file.processId          = processId;
    };

    //BEFORE EACH UPLOAD HANDLER 3
    //Note: this has to be here for any variable passed that changes per file. For example the processId.
    uploader.bind('BeforeUpload',function(up,file){
        var processId       = file.processId;
        var photoDiv        = jQuery('#photo'+processId+' .photoThumbDiv');
        var image           = jQuery(new Image()).appendTo(photoDiv);
        var preloader       = new mOxie.Image();

        preloader.downsize(100,100);
        preloader.onload    = function() {
            var img         = preloader.getAsDataURL();
            jQuery('#photo'+processId+' .photoThumbDiv').html('<img src="'+img+'">');
        };
        preloader.load(file.getSource());

        uploader.settings.multipart_params.processId        = file.processId;
    });

    //PROGRESS HANDLER 4
    uploader.bind('UploadProgress',function(up,file){
        var processId   = file.processId;
        var pb          = collection.getProgressBar(processId);
        if(file.percent<100){
            var progress = file.percent;
            pb.html('<div class="progressBar"><div class="progressBarColor"> </div></div>');
            jQuery('#photo'+processId+' .progressBarColor').css({width:progress+'%'});
        }else{
            pb.html('<div class="loaderSmall"></div> Processing');
        }
    });

    //FILE FINISHED HANDLER 5 
    uploader.bind('FileUploaded',function(up,file,info){
        var processId       = file.processId;
        var fileName        = file.name;
        file.fileName       = file.name;
        var params          = file;
        delete params.getNative;
        delete params.getSource;
        delete params.destroy;
        ui.request('registerFile','Photo',params);

        //ALL COMPLETE
        if(uploadedCnt == up.files.length){
            //uploader.splice();
            uploader.refresh();
        }
    });

    //GENERAL ERROR HANDLER -
    uploader.bind('Error', function(up, err) {
        switch(err.code){
            case plupload.FILE_EXTENSION_ERROR:
                fileExtensions = '';
                jQuery.each(up.settings.filters.mime_types,function(index,up) {
                    if(fileExtensions==''){
                        fileExtensions=up.extensions;
                    }else{
                        fileExtensions+=","+up.extensions;
                    }
                });
                var isOrAre = (fileExtensions && fileExtensions.indexOf(',') !== -1) ? 'are':'is';
                alertBox.msg("Only "+fileExtensions+" "+isOrAre+" accepted. Please try again.");
                break;
            case plupload.FILE_SIZE_ERROR:
                alertBox.msg("File size can not be larger than "+up.settings.max_file_size+'.');
                break;
        }
        uploader.refresh(); 
    });

    uploader.init();
},
/*检测用户何时从桌面拖动文件*/
initDragDetector:函数(){
var runtimes=ui.getUploadRunTimes();
var tmpId=Math.random();
uploader=新的plupload.uploader({
运行时:运行时,
最大文件大小:'500mb',
url:jQuery('#upSrvUrl').val(),
drop_元素:'uploadOverlay',
浏览按钮:'uploadOverlay',
过滤器:[
{标题:“图像文件”,扩展名:“jpg、tif、png、psd”},
],
最大文件数:100,
多部分参数:{rnd_id:Math.random(),tmp_sid:tmpId},
多重选择:正确,
文件\u数据\u名称:'upfile\u 0',
});
//初始化处理程序1
uploader.bind('Init',函数(up,params){
uploader.settings.multipart_params.mount=jQuery('#mount').val();
uploader.settings.multipart_params.publisherId=jQuery('#publisherId').val();
uploader.settings.multipart_params.upload_range=100;
if(uploader.features.dragdrop){
var el=jQuery(“上传覆盖”);
el[0]。ondragover=函数(事件){
event.dataTransfer.dropEffect=“复制”;
};
el[0]。ondragenter=函数(e){
if(如数据传输类型长度<4){
el.show();
}
};
el[0].ondrop=函数(){
if(jQuery('.photoThumbContainer')。长度>0){
el.hide();
}
};
}
});
//添加文件处理程序2(在删除文件后调用)
uploader.bind('FilesAdded',函数(up,files){
var i=0;
plupload.each(文件、函数(文件){
file.index=i;
uploader.fileAdded(文件);
i++;
});
uploader.start();
});
//将文件注入接口(上传功能之前)
uploader.fileAdded=函数(文件){
var processId=process.createProcessId(file.index);
//添加到文件对象并传递到注册
file.processId=processId;
};
//在每个上载处理程序3之前
//注意:对于传递的每个文件都会发生更改的任何变量,必须在此处输入。例如processId。
uploader.bind('BeforeUpload',函数(up,file){
var processId=file.processId;
var photoDiv=jQuery('#photo'+processId+'.photoThumbDiv');
var image=jQuery(new image()).appendTo(photoDiv);
var preload=new mOxie.Image();
预紧器。缩小尺寸(100100);
preload.onload=函数(){
var img=preload.getAsDataURL();
jQuery('#photo'+processId+'.photoThumbDiv').html('');
};
load(file.getSource());
uploader.settings.multipart_params.processId=file.processId;
});
//进度处理程序4
uploader.bind('UploadProgress',函数(up,file){
var processId=file.processId;
var pb=collection.getProgressBar(进程ID);

如果(file.percent如果有人对这里的解决方案感兴趣,那是因为uploader是全局设置的。每当初始化uploader时,在uploader前面添加“var”可以修复它