如何使用blueimp fileupload在运行时从当前上传队列中跳过文件

问题描述

嗨,我在从当前上传队列中跳过文件时遇到问题。

我目前的情况

  1. 我想在开始上传第二文件时中止它,以便在abort

    之后不发送该文件
  2. 我想从上传队列中跳过第3个文件-这不是中止,因为只有当前文件我们才能中止

这是我的做法

    var uploadFileList = [];

   add: function (e,data) {
             uploadFileList.push(data.files[0].name);
             data.submit();
     },.on('fileuploadchunksend',function (e,data) {
            /** Abort code starts here **/
            var filename = uploadFileList[1]; //abort 2nd file
            var currentFilename = data.files[0].name;
            if(currentFilename == filename){
                  data.abort();
             }
            /** Abort code Ends here **/

            //skip code
             data.originalFiles.splice(3,1);
        })

注意:我不想为abort使用任何ui或跳过

这是完整的代码(不跳过):http://jsfiddle.net/eabangalore/dm9j5uzn/84/

对于当前上传,它将被中止,对于队列,将被跳过。

请事先帮助我!!

解决方法

尝试这样:


import TextSprite from '@seregpie/three.text-sprite';

let sprite = new THREE.TextSprite( {
                               text: 'Text must be rendered here...',alignment: 'center'
                         fontFamily: 'Arial,Helvetica,sans-serif',fontSize: 28,color: '#ffffff' } );
 
scene.add( sprite );

http://jsfiddle.net/0qmLw8pg/

最初设置了要跳过或中止哪些文件的数组。

要跳过文件(即不启动上传),请不要在该文件的$(function() { var skip = [2]; //file indexes to skip var abort = [1]; //file indexes to abort var uploadFileList = []; var indexAdd = 0; var countSubmit = 0; var countAlways = 0; var indexUpload = null; $('#fileupload').fileupload({ url: '/echo/json/',maxChunkSize: 1024 * 1024,maxRetries: 3,dataType: 'json',multipart: false,sequentialUploads: true,progress: function(e,data) { var progress = parseInt(data.loaded / data.total * 100,10),meter = $('.progress .meter'),percent = progress + '%'; meter.css('width',percent).text(percent); $('#currentFileName').text(data.files[0].name); },add: function(e,data) { uploadFileList.push({ name: data.files[0].name,state: null,jqXHR: null }); //Skip files in the skip array - i.e. don't start the file upload if (skip.indexOf(indexAdd) !== -1) { $('#skipFilename').text(uploadFileList[indexAdd].name); uploadFileList[indexAdd].state = 'skipped'; console.log(uploadFileList[indexAdd].name,'skip'); } else { uploadFileList[indexAdd].jqXHR = data.submit(); countSubmit++; }; indexAdd++; },done: function(e,data) { /* data.context.text('Upload finished.') */ ; },fail: function(e,data) {} }).on('fileuploadchunksend',function(e,data) { /* $.each(data.files,function (index,file) { console.log('fileuploadchunksend file: ' + file.name); }); */ /** Abort code starts here **/ /* var filename = uploadFileList[1]; //abort 2nd file var currentFilename = data.files[0].name; if (currentFilename == filename) { data.abort(); } */ /** Abort code Ends here **/ console.log(data.files[0].name,'fileuploadchunksend'); //abort files in the abort array for(var i = 0; i < uploadFileList.length; i++) { if(uploadFileList[i].name === data.files[0].name) { indexUpload = i; if(abort.indexOf(i) !== -1) { setTimeout(abortUpload,0); //setTimeout seems to solve the issue of the jqXHR.abort() not stopping the upload } else { uploadFileList[i].state = 'sent'; }; }; }; //skip code data.originalFiles.splice(3,1); }).on('fileuploadchunkdone',data) { /* console.info('testing',data); */ }).on('fileuploadstop',function(e) { uploadFileList.length = 0; }).on('fileuploadsend',function (e,data) { console.log(data.files[0].name,'send'); }).on('fileuploaddone','done',getStatus(data)); }).on('fileuploadfail','fail',getStatus(data)); }).on('fileuploadalways','always',getStatus(data)); countAlways++; if(countAlways === countSubmit) { for(var i = 0; i < uploadFileList.length; i++) { delete uploadFileList[i].jqXHR; }; console.log('done',uploadFileList); }; }); function getStatus(data) { //check if aborted for(var i = 0; i < uploadFileList.length; i++) { if(uploadFileList[i].name === data.files[0].name && uploadFileList[i].state === 'aborted') { return 'abort'; }; }; return data.textStatus; }; function abortUpload() { if(uploadFileList[indexUpload].jqXHR !== null) { console.log(uploadFileList[indexUpload].name,'aborting'); uploadFileList[indexUpload].state = 'aborted'; uploadFileList[indexUpload].jqXHR.abort(); }; }; }); 回调中运行data.submit()

中止适用于jQuery Ajax request个对象,例如从add回调返回。 send在这种情况下无法使用,因为它会发送所有文件,因此您将无法跳过任何文件。可以为在send回调中为每个文件返回的单独Ajax对象调用运行abort的函数。终止的另一种方法是在add callbackreturn false(就像jQuery Ajax beforeSend一样)。

已包含到控制台的日志,因此您可以看到它的运行情况。假设文件名是唯一的,则此代码有效。

编辑:已更新,可与Ajax对象一起使用,并在初始fileuploadsend之后的任何时候终止上传,例如(fileuploadsend)。