鸿蒙ArkTs 下载监听完成、进度 DownloadUtils工具类

import request from '@ohos.request';
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
import { common, Want } from '@kit.AbilityKit';

export  class DownloadUtils{


  /**
  * 下载文件
  * @param mContext
  * @param url
  * @param destFileDir
  * @param fileName
  * @param callback
  */
  public static downloadFile(mContext:Context,url: string, destFileDir: string, fileName: string ,callback: FileCallback): void{
  //  const filePath = mContext.filesDir + '/' + fileName;
    const filePath =   destFileDir + '/' + fileName;
    try {

      // 判定文件是否存在
      if (fs.accessSync(filePath)) {
        // 删除文件
        fs.unlinkSync(filePath)
      }

      let isHaveFile=fs.accessSync(destFileDir)
      if(!isHaveFile){
        fs.mkdirSync(destFileDir)
      }
        // 下载文件
        request.downloadFile(mContext, { url: url, filePath: filePath, enableMetered: true,
          enableRoaming: true }, (err, data) => {
          if (err) {
            console.error('Failed to request the download. Cause: ' + JSON.stringify(err));
            callback.onError()
          }
          // 监听文件下载的实时情况 receivedSize已下载 totalSize总大小
          data.on('progress', (receivedSize, totalSize) => {
            console.info("upload totalSize:" + totalSize + "  receivedSize:" + receivedSize);
            callback.inProgress(receivedSize,totalSize)
          })
          // 监听文件下载完成
          data.on('complete', () => {
            console.info('Download task completed.');
              callback.onSuccess(filePath)
          })
        });

    } catch (err) {
      console.error('err.code : ' + err.code + ', err.message : ' + err.message);
      callback.onError()
    }
  }

}


interface FileCallback {
  onError: () => void;
  inProgress: (progress: number, total: number) => void;
  onSuccess: (file: string) => void;
}


使用方法

let context = getContext(this) as common.UIAbilityContext;
let url="http://www.fao.fudan.edu.cn/_upload/article/files/f5/53/8b40af524563b9b60049899b2dd3/c9a205b4-4188-4af3-863e-bc4e56872e33.pdf"
const filePath = context.filesDir + '/' + "111.pdf";
DownloadUtils.downloadFile(context, url, filePath, "111.pdf", {
  onError: () => {
    console.error("下载失败");
  },
  inProgress: (progress, total) => {
    console.log(`下载进度:${progress}/${total}`);
  },
  onSuccess: (file) => {
    console.log(`下载成功,文件保存在: ${file}`);
  }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/713191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】六零导航页 _include_file.php 任意文件上传漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

西门子学习笔记15 - 位逻辑操作的学习

1、点动操作(按下按钮就启动松开就停止) 2、自锁电路(可以自己保持的状态除非常闭停止按下) 3、取反操作(顾名思义就是反过来1就变成0,0就变成1) 4、置为复位(置位之后如果不复位的话…

Elixir学习笔记——进程(Processes)

在 Elixir 中,所有代码都在进程内运行。进程彼此隔离,彼此并发运行并通过消息传递进行通信。进程不仅是 Elixir 中并发的基础,而且还提供了构建分布式和容错程序的方法。 Elixir 的进程不应与操作系统进程混淆。Elixir 中的进程在内存和 CPU…

餐厅点餐系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,商品管理,用户管理,店家管理,广告管理 店家账户功能包括:系统首页,个人中心,商品管理,广告管…

新能源汽车高压上电、高压下电逻辑分析

高压上电逻辑 新能源汽车的上电分为高压上电和低压上电,高压上电流程一般理解为高压件通电的过程,具体流程如下: 1、点火开关处于ON档时,仪表盘点亮,低压电接通。 2、VCU、BMS、MCU等控制模块依次被唤醒并开始进行自检…

驾校在线考试系统源码 手机+PC+平板自适应

Thinkphp在线考题源码 驾校在线考试系统 手机PC平板 自适应,机动车驾驶培训学校驾校类网站源码带手机端 运行环境:phpmysql 内附安装说明 驾校在线考试系统源码 手机PC平板自适应

深入探讨限流算法:固定窗口、滑动窗口、漏桶与令牌桶原理及应用场景

固定窗口算法 简单粗暴,但有临界问题: 滑动窗口算法 滑动窗口通俗来讲是一种流量控制技术,描述接收方TCP数据报缓冲区大小的数据。发送方根据这个数据计算最大可发送的数据量。滑动窗口协议是TCP使用的一种流量控制方法,允许发送…

如何从印刷体的图片中把手写体部分统统去掉?--免费途径

AI图像处理技术 我是从国外某个网站上找到在线AI免费credit的处理方式的。国内的基本没有全功能试用、或者即使收费也不好用。 国内的差距主要是:1、对图片分辨率和大小有更多限制,即使收费用户也是;2、需要安装app之类,然后连线…

给类设置serialVersionUID

第一步打开idea设置窗口(setting窗口默认快捷键CtrlAltS) 第二步搜索找到Inspections 第三步勾选主窗口中Java->Serializations issues->下的Serializable class without serialVersionUID’项 ,并点击“OK”确认 第四步鼠标选中要加…

智能体(Agent)实战——从gpts到auto gen

一.GPTs 智能体以大模型作为大脑,同时配备技能,使其能够完成具体的任务。同时,为了应用于垂直领域,我们需要为大模型定义一个角色,并构建知识库。最后,定义完整的流程,使其完成整个任务。以组会…

【回文 马拉车】214. 最短回文串

本文涉及知识点 回文 马拉车 LeetCode214. 最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入:s “aacecaaa” 输出:“aaacecaaa” 示…

从最小二乘法的角度来理解卡尔曼滤波(1)

从最小二乘法的角度来理解卡尔曼滤波(1) flyfish 假设你有一堆数据点,比如在一个二维平面上有很多点。你想找到一条直线,能够尽可能接近这些点。这条直线可以用一个方程来表示:y mx b,其中 m 是斜率&am…

Nginx - 反向代理、负载均衡、动静分离(案例实战分析)

目录 Nginx 开始 概述 安装(非 Docker) 配置环境变量 常用命令 配置文件概述 location 路径匹配方式 配置反向代理 实现效果 准备工作 具体配置 效果演示 配置负载均衡 实现效果 准备工作 具体配置 实现效果 其他负载均衡策略 配置动…

MATLAB直方图中bin中心与bin边界之间的转换

要将 bin 中心转换为 bin 边界,请计算 centers 中各连续值之间的中点。 d diff(centers)/2; edges [centers(1)-d(1), centers(1:end-1)d, centers(end)d(end)];要将 bin 边界转换为bin 中心 bincenters binedges(1:end-1)diff(binedges)/2;

16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用 预训练LLaMA2-7B模型需要多少显存? 假设以bf16混合精度预训练 LLaMA2-7B模型,需要近120GB显存。即使A100/H100(80GB)单卡也无法支持。 为何比 QLoRA多了100GB?不妨展开计算下显存占用&…

文章MSM_metagenomics(五):共现分析

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 本教程是使用一个Python脚本来分析多种微生物(即strains, species, genus等&…

维度建模中的事实表设计原则

维度建模是一种数据仓库设计方法,其核心是围绕业务过程建立事实表和维度表。事实表主要存储与业务过程相关的度量数据,而维度表则描述这些度量数据的属性。 以下是设计事实表时需要遵循的几个重要原则,来源于《维度建模》那本书上&#xff0…

13.docker registry(私有仓库)

docker registry(私有仓库) 1.从公有仓库中下载镜像比较慢 ,比如docker run执行一个命令假设本地不存在的镜像,则会去共有仓库进行下载。 2.如果要是2台机器之间进行拷贝,则拷贝的是完整的镜像更消耗空间。 3.如果1个…

python数据分析-糖尿病数据集数据分析预测

一、研究背景和意义 糖尿病是美国最普遍的慢性病之一,每年影响数百万美国人,并对经济造成重大的经济负担。糖尿病是一种严重的慢性疾病,其中个体失去有效调节血液中葡萄糖水平的能力,并可能导致生活质量和预期寿命下降。。。。 …

docker 简单在线安装教程

1、配置阿里镜像源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 2、指定版本安装docker 本次制定安装 docker 服务版本、客户端版本都为: 19.03.14-3.el7 yum -y install docker-ce-19.03.14-3.e…