HarmonyOS 鸿蒙Next中@ohos.request (上传下载) 上传文件 progress 无法实时获取进度
HarmonyOS 鸿蒙Next中@ohos.request (上传下载) 上传文件 progress 无法实时获取进度
代码如下:
static UploadFileBase() :Promise<request.agent.Task>{
// ..... el2/100/base/<包名>/haps/entry/cache
let filePath = FilePathUtil.getCacheDir(AppUtil.getContext()) + '/test.apk'
let attachments: Array<request.agent.FormItem> = [
{
name: "file", value: {
filename: "filename",
mimeType: "application/octet-stream",
path: filePath,
}
}];
let config: request.agent.Config = {
action: request.agent.Action.UPLOAD,
url: 'https://xxxxxxxx',
title: 'createTest',
description: 'Sample code for create task',
mode: request.agent.Mode.BACKGROUND,
overwrite: false,
method: "POST",
data: attachments,
// saveas: "./",
network: request.agent.Network.ANY,
metered: false,
roaming: true,
retry: true,
redirect: true,
index: 0,
begins: 0,
ends: -1,
gauge: false,
precise: false,
token: "it is a secret",
multipart: true
};
return config
}
static downloadFile(config: request.agent.Config): Promise<request.agent.Task> {
return request.agent.create(getContext(), config)
}
BaseRequestUtil.downloadFile(BaseRequestUtil.getUploadConfig()).then((task:request.agent.Task)=>{
this.upLoadTask = task
BaseRequestUtil.onProgressTask(task,(progress: request.agent.Progress)=>{
})
BaseRequestUtil.onCompletedTask(task,(progress: request.agent.Progress)=>{
})
task.start()
}).catch((error:BusinessError)=>{
Logger.d('上传 异常' + error.code + "message = " + error.message)
})
调用日志:
05-23 16:19:41.465 32979 A0FF00/com.soh...[Hxe_Log_Tag] com.sohuinc.SOHUEhr D upload task progress.{"state":32,"index":0,"processed":76922302,"sizes":[120845505],"extras":{}}
05-23 16:19:50.669 32979 A0FF00/com.soh...[Hxe_Log_Tag] com.sohuinc.SOHUEhr D upload task progress.{"state":32,"index":0,"processed":120845505,"sizes":[120845505],"extras":{"content-type":"application/json","date":"Fri, 23 May 2025 08:19:50 GMT","server":"nginx","trace-id":"c50116d8682e43458d30f895285ea0f9.57361.17479883865170097","vary":"Origin, Access-Control-Request-Method, Access-Control-Request-Headers"}}
05-23 16:19:50.682 32979 A0FF00/com.soh...[Hxe_Log_Tag] com.sohuinc.SOHUEhr D upload task completed.{"state":64,"index":0,"processed":120845505,"sizes":[120845505],"extras":{"content-type":"application/json","date":"Fri, 23 May 2025 08:19:50 GMT","server":"nginx","trace-id":"c50116d8682e43458d30f895285ea0f9.57361.17479883865170097","vary":"Origin, Access-Control-Request-Method, Access-Control-Request-Headers","body":"{\"result\":\"true\",\"message\":{\"fileUniqueId\":\"174798838811467337B086099C8B9DD9937BE312E93BD\",\"thumbnailUniqueId\":null,\"thumbnailWidth\":0,\"thumbnailHeight\":0,\"progress\":null},\"errorCode\":\"0\"}"}}
有做过这方面功能的大佬指点一下么?
更多关于HarmonyOS 鸿蒙Next中@ohos.request (上传下载) 上传文件 progress 无法实时获取进度的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
鸿蒙Next中@ohos.request上传文件的progress回调可能存在事件触发频率限制。系统默认会优化进度更新频率以减少性能消耗,因此无法获取逐字节的实时进度。可通过config配置中的granularity参数调整进度回调粒度,将其设为较小的数值(如1)可提高回调频率。若仍不满足需求,需自行实现分片上传逻辑,在每片上传完成后手动更新进度。
更多关于HarmonyOS 鸿蒙Next中@ohos.request (上传下载) 上传文件 progress 无法实时获取进度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,@ohos.request模块的进度回调确实存在更新频率问题。根据您的代码和日志分析,主要问题出在BACKGROUND模式下进度回调的触发机制。
- 当前问题分析:
- 日志显示只有两个进度回调(76MB和120MB),说明BACKGROUND模式下进度更新不频繁
- 这是系统为优化性能而设计的机制,BACKGROUND模式会降低回调频率
- 解决方案建议:
- 将mode改为FOREGROUND模式:
mode: request.agent.Mode.FOREGROUND
- FOREGROUND模式会提供更频繁的进度更新
- 但需要注意这会增加性能开销
- 其他注意事项:
- 确保precise参数设置为true以获得更精确的进度
- 大文件上传时,FOREGROUND模式可能会影响应用性能,需权衡选择
FOREGROUND模式应该能解决您遇到的进度更新不及时问题,但请根据实际场景评估性能影响。