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

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.kler.cn/a/511853.html

相关文章:

  • 【数学建模美赛速成系列】O奖论文绘图复现代码
  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
  • 搜维尔科技:Xsens人形机器人解决方案的优势
  • 【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验
  • Web前端------表单标签
  • dockerhub上一些镜像
  • RabbitMQ---应用问题
  • 回顾2024年度 - 挑战之旅:学习、生活与成长的华丽蜕变
  • 【无标题】微调是迁移学习吗?
  • Django简介与虚拟环境安装Django
  • leetcode763.划分字母区间
  • Android 存储进化:分区存储
  • 【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠
  • Android 极光推送快速开发集成指南(1)
  • Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert
  • 第9章:Python TDD解决货币对象相等性比较难题
  • python爬虫报错日记
  • 初始JavaEE篇 —— 快速上手 SpringBoot
  • 【Redis】Redis 集群中节点之间如何通信?
  • [cg] glProgramBinary
  • JavaScript系列(35)-- WebSocket应用详解
  • Redis系列之底层数据结构字典Dict
  • 图像处理|顶帽操作
  • Kivy App开发之UX控件Bubble气泡
  • 使用redis-cli命令实现redis crud操作
  • Meta标签教程:提升网站SEO与用户体验的利器