
旋风小皮皮
- 发布:2016-09-12 13:32
- 更新:2016-09-12 15:18
- 阅读:1923
3 个回复
lhyh - 目前就职成都
贴下关键代码,就这么说,猜不出来你的问题是什么原因的兄弟
旋风小皮皮 (作者)
1、上传前把上传任务和上传文件的记录放到一个数组中:
uploadStack.push({
itemId:item.id,//文件id
ts:task,//上传任务
pauseState:1,//0:暂停,1表示在就绪队列(可以上传)
});
2、终止时,以文件id为参数,查找Stack,找到task,终止
for (var i=0;i<uploadStack.length;i ++ ){
if(itemId==uploadStack[i].itemId){
ts = uploadStack[i].ts;
ts&&ts.abort();
break;
}
}
lhyh
怎么确保你进行终止任务操作的时候,任务还没有执行完?根据API的说法,“如果任务未完成,则终止上传,并从任务列表中删除。”,你在终止的时候最好做下上传任务状态的判断http://www.html5plus.org/doc/zh_cn/uploader.html#plus.uploader.UploadState
2016-09-12 14:20
旋风小皮皮 (作者)
好的 多谢~
2016-09-12 14:30
旋风小皮皮 (作者)
执行abort()之前,判断了任务的状态是3;执行abort之后,不执行UploadCompletedCallback方法,但是文件也依旧会上传到服务器。
同样的代码,ios上面执行没有问题。确认是安卓的bug。
lhyh
有个神奇的问题,IOS执行代码比安卓要快,打个时间戳看下你就知道了。那可能的情况就是,在IOS上,你判断到任务状态是3,然后执行abort,任务暂停了。在android上,因为刚刚说的原因,虽然判断到了状态时3,但是执行abort的速度没赶上任务执行的速度,so……你试试上传一个大一点的文件
2016-09-12 16:39
旋风小皮皮 (作者)
我在abort方法打了一个时间戳,
在UploadCompletedCallback回调中也打了一个时间戳:
var task = plus.uploader.createUpload(server,
{method:"POST"},function ( t, status ) {
if (t.state==4 && t.staus==200){
console.log("上传完成-------time"+(new Date()).getTime());
}
});
abort方法执行后,上面这段代码的log就不执行了;
如果按照你说的原因,任务执行速度快,那必定会执行上面的log,提示文件上传成功,但是并没有执行。
2016-09-12 17:51
lhyh
你的代码里 “t.state==4 && t.staus==200” t应该是代表upload对象,该对象并没有status属性,你代码错了
2016-09-12 18:09
旋风小皮皮 (作者)
好吧,,,写错了!!
2016-09-13 17:35