旋风小皮皮
旋风小皮皮
  • 发布:2016-09-12 13:32
  • 更新:2016-09-12 15:18
  • 阅读:1686

安卓端任务上传中时,调用abort()终止上传任务,任务没有取消掉,依旧可以上传成功

分类:HTML5+
2016-09-12 13:32 负责人:无 分享
已邀请:
lhyh

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

该问题目前已经被锁定, 无法添加新回复