问题描述
我目前的情况
这是我的做法
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 );
最初设置了要跳过或中止哪些文件的数组。
要跳过文件(即不启动上传),请不要在该文件的$(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
callback中return false
(就像jQuery Ajax beforeSend一样)。
已包含到控制台的日志,因此您可以看到它的运行情况。假设文件名是唯一的,则此代码有效。
编辑:已更新,可与Ajax对象一起使用,并在初始fileuploadsend
之后的任何时候终止上传,例如(fileuploadsend
)。