当前位置: 首页 > news >正文

uniapp——App 监听下载文件状态,打开文件(三)

5+ 实现下载文件并打开

这里演示,导出Excel 表格

文章目录

    • 5+ 实现下载文件并打开
      • DEMO
      • 监听下载进度效果图
      • 为什么 totalSize 一直为0?

相关Api:
downloader


DEMO

提示:

  • 请求方式支持:GET、POST;POST 方式需要设置Content-Type
  • 暂停下载任务: dtask.pause();
  • 取消下载任务:dtask.abort();
  • 监听下载文件:实时状态,根据个人所需可以在页面上添加进度条等UI效果;

h5PlusDownloadFile() {let header = {token: getToken(),'Content-Type': 'application/json' // 设置 POST 请求提交的数据类型为JSON字符串}// 下载任务的参数let options = {method: 'POST',filename: `_doc/test_${new Date().getTime()}.xlsx` // 支持以"_downloads/"、"_doc/"、"_documents/"开头}// 创建下载任务let url = 'https://xxx/export';var dtask =	plus.downloader.createDownload(url, options, (d, status) => {console.log('下载完成', d, status);if(status == 200){ console.log("Download success: " + d.filename);uni.showToast({title: '下载成功'})// 打开指定的文件plus.runtime.openFile(options.filename);} else {console.log("Download failed: " + status); uni.showToast({title: '下载失败',icon: 'error'})plus.downloader.clear(); // 清除下载任务}  })// 设置下载请求头数据Object.keys(header).forEach((key) => {dtask.setRequestHeader(key, header[key]);})// 监听下载任务状态,根据个人所需 实现进度条等dtask.addEventListener("statechanged", this.onStateChanged, false);// 开始下载dtask.start();
},
onStateChanged(download, status) {// Download对象管理一个下载任务console.log('监听下载状态--->文件的总大小/已完成下载文件的大小:', download.totalSize, download.downloadedSize);if(download.state == 4 && status == 200){// 下载完成 console.log("onStateChanged Download success: " + download.getFileName());  }  
},

监听下载进度效果图

  • 截取后面部分效果图
    在这里插入图片描述

为什么 totalSize 一直为0?

  • 下载任务开始传输数据时更新,在此之前其值为0。 此值是从HTTP协议的Content-Length中获取,如果服务器未返回Content-Length数据则此值始终为0;
http://www.lryc.cn/news/523930.html

相关文章:

  • 循环队列(C语言)
  • 数据可视化:让数据讲故事的艺术
  • 雷电9最新版安装Magisk+LSPosd(新手速通)
  • Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
  • 使用Websocket进行前后端实时通信
  • vue2使用flv.js在浏览器打开flv格式视频
  • OpenCV相机标定与3D重建(61)处理未校准的立体图像对函数stereoRectifyUncalibrated()的使用
  • [cg] glProgramBinary
  • LeetCode hot 力扣热题100 二叉树的最大深度
  • 速通Docker === 网络
  • 【MySQL — 数据库基础】深入解析MySQL常用数据类型
  • Linux高级--3.3.1 C++ spdlog 开源异步日志方案
  • 电梯系统的UML文档05
  • 如何使 LLaMA-Factory 支持 google/gemma-2-2b-jpn-it 的微调
  • MySQL中日期和时间戳的转换:字符到DATE和TIMESTAMP的相互转换
  • HarmonyOS NEXT开发进阶(十):UIAbility 组件交互
  • 深入探索Math.NET:开启高效数值计算之旅
  • AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发
  • 【2024 CSDN博客之星】技术洞察类:从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)
  • Linux——入门基本指令汇总
  • 54,【4】BUUCTF WEB GYCTF2020Ezsqli
  • 【Leetcode 热题 100】45. 跳跃游戏 II
  • C/C++ 时间复杂度(On)
  • 【STM32-学习笔记-10-】BKP备份寄存器+时间戳
  • React 中hooks之 React.memo 和 useMemo用法总结
  • 日志收集Day001
  • 机器人“大脑+小脑”范式:算力魔方赋能智能自主导航
  • python程序跑起来后,然后引用的数据文件发生了更新,python读取的数据会发生变化吗
  • VSCode最新离线插件拓展下载方式
  • 算法题目总结-栈和队列