HarmonyOS 鸿蒙Next 关于http下载问题

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于http下载问题 1、使用request.downloadFile下载的时候,当对应目录中已存在同名文件,下载在上报失败的同时,原已存在的文件大小变成0字节,测试了几次,包括更换手机都出现这种情况,帮忙看一下这里是否存在问题?

2、下载文件的路径如果使用internal://形式的路径格式,后续可使用哪一个api将其转换成真实的磁盘路径形式?在下述链接 开发者文档 中,有描述支持internal: "文件的本地存储路径。 仅支持“internal”协议类型,“internal://cache/“为必填字段,示例: internal://cache/path/to/file.txt” internal://cache/path/to/file.txt 这种形式的路径,转换为实际沙箱的路径应该如何转换

3、文件下载过程中,downloadFile接口内部写文件是在调用downloadFile大的线程执行,还是在另外一个线程完成读写?

4、如果设置了http头中的range,下载是从指定偏移量开始下载吗?另外下载回来的数据写入文件支持偏移量定位吗?

5、下载的progress、complete等回调执行是在工作线程?还是在调用downloadFile的线程?如果是在downloadFile线程,如果这个线程已经关闭,那回调在哪一个线程?此时是否会出现异常?例如如果我在taskpool中发起下载请求,但在下载完成之前,task已经失效,请问此时应该如何处理最佳?

6、请问httpRequest.request中,发起get请求,返回的数据是否存在大小限制?如存在,请问限制值是多大?


更多关于HarmonyOS 鸿蒙Next 关于http下载问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

问题1: 规格问题,对于同名问题先用 fs 的接口检查你对应目录下是不是有同名文件了,如果存在同名文件可以使用api10 的Config 选项有 overwrite 选项,默认为false。

问题2: internal:// 形式的路径格式为Android路径,需要用鸿蒙沙箱路径转uri。

问题3: downloadFile 接口内部写文件是运行在异步线程。

问题4: 如果设置了http头中的range,下载是从指定偏移量开始下载,下载回来的数据写入文件不支持偏移量定位,目前只能按照断点处进行续传。

问题5: 下载的progress、complete等回调执行主线程中,如果我在taskpool中发起下载请求,那么下载文件时间不能超过三分钟,如果超过三分钟出现失败,请使用worker进行异步操作。

问题6: 有限制,大小为5M。

更多关于HarmonyOS 鸿蒙Next 关于http下载问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我是这样写的

let context = getContext(this) as common.UIAbilityContext;
let filesDir = context.filesDir;
directoryApi.fileDetail({ id: String(item.id) }).then((res) => {
  if(res.code == 200) {
    data = res.data as fileDetail
    url = data.url
    try {
      request.downloadFile(context, {
        url,
        filePath: filesDir + '/' + data.name + '.' + data.fileType
      }).then((downloadTask: request.DownloadTask) => {
        downloadTask.on('complete', () => {
          console.info('文件下载download complete');
          let file = fs.openSync(filesDir + '/' + data.name + '.' + data.fileType, fs.OpenMode.READ_WRITE);
          let arrayBuffer = new ArrayBuffer(1024);
          let readLen = fs.readSync(file.fd, arrayBuffer);
          let buf = buffer.from(arrayBuffer, 0, readLen);
          console.info(`文件下载The content of file: ${buf.toString()}`);
          fs.closeSync(file);
        })
      }).catch((err: BusinessError) => {
        console.error(`文件下载Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
      });
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`文件下载Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
    }
  }
})

我是这样写的 下载单个文件 后端返回链接的格式 但是报错13400002
根目录我是这样取得 let context = getContext(this) as common.UIAbilityContext;

针对HarmonyOS 鸿蒙Next关于http下载问题,以下提供直接且专业的回答:

在HarmonyOS鸿蒙Next系统中,若遇到http下载问题,首先应确认网络连接状态是否稳定。由于http协议本身不涉及复杂的加密过程,因此下载问题多与网络稳定性、服务器响应或客户端处理逻辑有关。

  1. 检查网络设置:确保设备已连接到互联网,且网络信号良好。尝试切换至其他网络环境,如从Wi-Fi切换至移动数据,以排除网络问题。

  2. 服务器响应:验证下载链接是否有效,服务器是否正常运行。可以尝试在其他设备或浏览器中使用相同的下载链接,以确认问题是否出在服务器端。

  3. 客户端处理:检查鸿蒙系统中的应用程序是否有下载限制或特定设置,如文件大小限制、下载路径设置等。确保应用程序具有足够的权限进行网络访问和文件存储。

  4. 系统更新:确认鸿蒙系统是否为最新版本。有时,系统更新可能包含对下载功能的修复和改进。

  5. 错误日志:查看应用程序或系统的错误日志,以获取更详细的下载失败信息,有助于定位问题原因。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部