鸿蒙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.mzph.cn/bicheng/28083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT Creator软件】解决中文乱码问题

QT Creator软件解决中文乱码问题 问题描述:Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8,但是仍然没有任何作用,于是有了以下的解决方案 原因剖析:因为项目的编码与控制台的编码不一致…

LINUX中使用DT_MACHINE_START/MACHINE_START宏

LINUX中使用DT_MACHINE_START/MACHINE_START宏 DT_MACHINE_START宏 LINUX中用DT_MACHINE_START/MACHINE_START定义的MACH,并给出定义的各个成员函数在初始化过程中被调用的时机 比如,kernel/arch/arm/mach-vexpress/v2m.c: // SPDX-License-Identifier: GPL-2.0 #include…

Windows10安装配置Docker客户端和WSL2与Hyper-V虚拟机

一、需求说明 需要在Windows系统中安装配置Docker的客户端,方便直接管理配置docker镜像容器内容。 二、Windows10安装Docker客户端步骤 2.1、下载安装Docker客户端 对于Windows 10以下的用户,推荐使用Docker Toolbox Windows安装文件:http://mirrors.aliyun.com/docker-…

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

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

JAVA集合常见知识点总结

JAVA集合知识点总结 说说 List, Set, Queue, Map 四者的区别? List :存储的元素是有序的、可重复的。Set : 存储的元素不可重复的。Queue : 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。Map : 使用键值对(ke…

给类设置serialVersionUID

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

DearLicy主题 | 小众化小清新风格的博客主题源码 | Typecho主题模版

DearLicy主题,一款小众化小清新风格的博客主题 主题支持Typecho所支持的所有版本PHP 简约、小众、优雅 安装教程 1.将主题上传至/usr/themes/文件夹下解压 2.后台进行启用 3.访问前台查看效果 源码下载:https://download.csdn.net/download/m0_6604…

【名词解释】Unity中的3D物理系统:碰撞体

Unity中的3D物理系统中的碰撞体(Collider)是用于检测和响应物理碰撞的组件。以下是一些基本的名词解释和使用方法的代码示例: 名词解释: Collider:用于检测碰撞的组件,可以是球形、盒形、胶囊形或其他形状…

DocGraph相关概念

结合简化版的直观性和专业版的深度,我们可以得到一个既易于理解又包含专业细节的DocGraph概念讲解。 DocGraph概述(简化版) 想象DocGraph就像是文章信息的地图。它通过拆分文档、识别关键词、分析关系,并最终以图形方式呈现这些…

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

路由传参的方法?

1. 查询参数(query) 查询参数通常附加在URL的查询字符串中,例如:/user?id123。 首先,你需要在路由定义中不需要做特别设置。然后,在组件中,你可以通过$route.query对象来获取查询参数。 路由…

PHP入门教程2:控制结构和函数

PHP专栏(第二篇):控制结构和函数 在上一篇文章中,我们学习了PHP的基础知识和基本语法。接下来,我们将深入探讨PHP的控制结构和函数,这是编写复杂程序的基础。本文将包含以下几个部分: 条件语句…

python简单练习案例-石头剪刀布小游戏

🌈所属专栏:【python】 ✨作者主页: Mr.Zwq ✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询!…

IDEA SpringBoot整合Mybatis(保姆级教程,超详细!!!)

目录 1. 简介 2. 创建SpringBoot项目 3. Maven依赖引入 4. 创建mapper文件夹 5. 数据源和Mybatis配置 6. 工程启动类配置 7. 连接数据库和创建测试表 8. Mapper接口和XML自动生成 9. 接口测试 1. 简介 本博客将详细介绍在IDEA中,如何整合SpringBoot与Myba…

基于SSM+Jsp的在线教育资源管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

AI办公自动化:批量根据Excel表格内容制作Word文档

工作任务:Excel表格中有大量文本,根据这些文本自动生成word文档 在chatgpt中输入提示词: 你是一个Python编程专家,写一个Python脚本,具体步骤如下: 读取Excel文件:"F:\AI自媒体内容\AI视…

【React】《React 学习手册 (第2版) 》笔记-Chapter3-JavaScript 函数式编程

三、JavaScript 函数式编程 函数可以使用 var、let 或 const 关键字声明,就像声明字符串、数字等变量一样。 var log function(message) {console.log(message); }const log message > {console.log(message); };由于函数是变量,那就可以把函数添加…

android OTA升级之后,apk崩溃无法启动

硬件平台:QCS6125 软件平台:Android 11 问题背景:系统版本从低版本升级到高版本后,apk崩溃启动失败。启动失败的activity为apk新增加的组件,报错的信息为: ActivityNotFoundException: Unable to find ex…

[leetcode]将二叉搜索树转化为排序的双向链表

. - 力扣(LeetCode) /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val _val;left NULL;right NULL;}Node(int _val, Node* _left, Node* _right) {val _val;left _left;right _rig…

目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:零售食品 LOGO 检测数据集,真实零售食品 LOGO 高质量商品图片数据,数据集含常见零售食品 LOGO 图片,包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富,标注标签包含 150…