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

uniapp——App下载文件,保存、打开文件(二)

uniapp如何下载文件、保存、打开文件

时光荏苒,2024即将过去!
迈向2025,祝大家新的一年工作顺利、万事如意,少一点BUG,涨一点工资…↖(ω)↗

文章目录

    • uniapp如何下载文件、保存、打开文件
      • 下载文件
      • 保存并打开文件
      • 处理` iOS` 打开文件可能失败问题
      • 相关API返回数据格式
        • 下载成功
        • 保存文件成功
        • 拷贝目录成功

相关Api:

  • uni.downloadFile
  • uni.saveFile
  • 5+ API

下载文件

  • 通过 uni.downloadFile 结合 uni.saveFile 及 5+ Api 实现
  • 例:导出 Excel文件
downloadFile() {// 下载文件资源到本地let header = {Authorization: getToken()}uni.downloadFile({url: 'xxx/export',header,success: (res) => {console.log('下载成功:', res);if (res.statusCode === 200) {this.saveFile(res.tempFilePath);}},fail: (err) => {uni.showToast({title: '下载失败',icon: 'error'})}});
}

保存并打开文件

  • 保存文件到本地
saveFile(tempFilePath) {uni.saveFile({tempFilePath: this.fileNameEscape(tempFilePath),success: (res) => {console.log('保存文件成功:', res);// 需要保存的文件的临时路径let tempFilePath = res.savedFilePath;let fileName = `Smile_${new Date().getTime()}.xlsx`; // 目标文件名// 通过URL参数获取目录对象或文件对象plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {plus.io.resolveLocalFileSystemURL('_doc/', (root) => {// 创建或打开当前目录下指定的文件root.getFile(fileName, {create: true}, (file) => {// 删除、拷贝目录file.remove(() => {entry.copyTo(root, fileName, (entry) => {console.log('拷贝目录成功:', entry.fullPath);// 调用第三方程序打开指定的文件plus.runtime.openFile(entry.fullPath);}, (err) => {console.log('拷贝目录失败:', err);});});}, (err) => {console.log('获取文件失败', err);});});});},fail: (err) => {console.log('保存文件失败', err);}});
}

处理 iOS 打开文件可能失败问题

  • 下载文件名中包含中文字符时会失败情况
fileNameEscape(filename) {if (uni.getSystemInfoSync().platform == "ios") {filename = escape(filename);}return filename;
},

相关API返回数据格式

下载成功
{"tempFilePath": "_doc/uniapp_temp_1735639708906/download/export.json","statusCode": 200,"errMsg": "downloadFile:ok"
}

保存文件成功
{"errMsg": "saveFile:ok","savedFilePath": "_doc/uniapp_save/17356398268860.json"
}

拷贝目录成功
/storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/Smile_1735639826926.xlsx
http://www.lryc.cn/news/513243.html

相关文章:

  • Postman接口测试05|实战项目笔记
  • 【paddle】初次尝试
  • 01-2023年上半年软件设计师考试java真题解析
  • 一文讲清楚CSS3新特性
  • 系统设计案例:设计 Spotify
  • 太速科技-633-4通道2Gsps 14bit AD采集PCie卡
  • 图片叠加拖拽对比展示效果实现——Vue版
  • 结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中的应用前景
  • 【MATLAB APP Designer】小波阈值去噪(第一期)
  • ClickHouse副本搭建
  • K3知识点
  • cocos creator 3.x版本如何添加打开游戏时首屏加载进度条
  • Fama MacBeth两步法与多因子模型的回归检验
  • IDEA 搭建 SpringBoot 项目之配置 Maven
  • node.js之---事件循环机制
  • Python OpenAI 库开发指南:从入门到实战精通
  • flash-attention保姆级安装教程
  • 送给一年编程道路的自己
  • LeRobot(1)
  • C++ 设计模式:组合模式(Composite Pattern)
  • OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示
  • 强化学习(1)
  • 【漏洞复现】金和OA C6 FileDownLoad.aspx 任意文件读取漏洞复现
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-Axolotl-单机多卡-RTX 4090双卡(七)
  • Dockerfile 构建继承父镜像的 ENTRYPOINT 和 CMD
  • 46. Three.js案例-创建颜色不断变化的立方体模型
  • Linux系统离线部署MySQL详细教程(带每步骤图文教程)
  • 【数据仓库】hive on Tez配置
  • Kubernetes Gateway API-3-TLS配置
  • C++ 设计模式:原型模式(Prototype Pattern)