请教下request.agent.create 下载任务恢复断点续传?

使用 request.agent.create api 创建后台下载任务,并将任务Id 进行本地缓存
场景一: App 未关闭,将任务暂停,然后将 下载任务 进行恢复
测试结果: 任务可以恢复,并且可以正常断点续传
场景二:App 关闭时,存在未完成的任务, 当App 关闭时 ,将未完成的任务进行暂停;当App 重启后,通过本地缓存的任务 Id request.agent.getTask API 获取到任务 并进行 resume 恢复
测试结果: 任务可以恢复,但断点续传失败,任务进度重新开始
期望场景二也可以 正常恢复断点续传

阅读 709
1 个回答

断点续传的实现需要依赖于服务器,客户端仅支持通过设置下载的开始位置和结束位置来控制是否断点续传
下载请求可参考如下:

let config: request.agent.Config = { 
  action: request.agent.Action.DOWNLOAD, 
  url: 'https://test.com/jdk-21_linux-aarch64_bin.tar.gz', 
  title: 'taskOnTest', 
  description: 'Sample code for event listening', 
  mode: request.agent.Mode.FOREGROUND, 
  overwrite: false, 
  method: "GET", 
  data: '', 
  saveas: "./", 
  network: request.agent.Network.WIFI, 
  metered: false, 
  roaming: true, 
  retry: true, 
  redirect: true, 
  index: 0, 
  begins: 0, 
  ends: -1, 
  gauge: false, 
  precise: false, 
  token: "it is a secret" 
}; 
request.agent.create(getContext(), config).then((task: request.agent.Task) => { 
  task.on('progress', (progress: request.agent.Progress) => { 
    console.info('upload task progress:' + progress); 
  }); 
  task.on('completed', (progress: request.agent.Progress) => { 
    console.info('upload task completed:' + progress); 
  }); 
  task.on('failed', (progress: request.agent.Progress) => { 
    console.info('upload task failed:' + progress); 
  }); 
  task.start(() => { 
    console.info('start task success'); 
  }) 
  console.info(`Succeeded in creating a upload task. result: ${task.tid}`); 
}).catch((err: BusinessError) => { 
  console.error(`Failed to create a upload task, Code: ${err.code}, message: ${err.message}`); 
});

begins和ends当前能实现基础的分段上传下载能力,完整的断点续传功能当前需要由开发这边来实现具体的下载拼接逻辑。overwrite若设置为false则在第二次下载时会报错:文件已存在,若设置为true则会覆写此文件;具体实现逻辑可参考:设置overwrite为true,下载中断后需要一个逻辑重命名并将两次下载文件进行拼接,下载完成并拼接后覆盖之前的下载文件。
开发者pause 的任务 resume ,现在应该不是断点续传,就是普通的重传。要传片段的话一般要应用自己控制,在 config 里填 begin,ends

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题