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

微信小程序中下载文件(非图片)方式总结

前言

总是有需求想在微信小程序里面做下载文件并保存的功能,所以自己整理了一下小程序涉及到下载api,大致理了下在小程序里面下载的流程和解决方案。


一、涉及api

1.wx.saveFile()

​ 文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFile.html

作用:保存文件到本地。

​注意:
1.该api调用的限制是下载文件最大为10m,且该接口已停止维护。
2.不支持保存后的文件转发,保存后的文件仅支持在小程序内使用。
3.保存的位置是在小程序缓存里面,开发者和用户不需要关心。

2.wx.downloadFile()

​ 文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html

作用:下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径)。
注意:
单次下载允许的最大文件为 200MB。

3.wx.getFileSystemManager().saveFile()

文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html

作用:微信文件管理对象,保存临时文件到本地。
注意:
1.FileSystemManager是微信小程序文件管理器,通过 wx.getFileSystemManager 获取,saveFile()是它提供的一个方法

4.api总结

以上三个api都不能实现真正意义的下载保存,因为微信小程序提供的存储服务是以小程序和用户维度隔离的存储服务,所以下载下来之后用户并不能访问到自己下载的文件。做不到用户下载文件之后可以快捷的找到下载的文件。只是下载到微信app的缓存里面。且微信也不建议开发人员或用户去查询本地文件存储的路径。该结论官方文档也有具体说明:

image

 

二、方案一

使用转发文件API  》 wx.shareFileMessage

image

 示例代码:

  // callback 写法
  wx.downloadFile({url: URL, // 下载url
    success (res) {// 下载完成后转发
      wx.shareFileMessage({filePath: res.tempFilePath,success() {},fail: console.error,})},fail: console.error,})// async await 写法const { tempFilePath } = await wx.downloadFile({url: URL, // 下载url
  })// 下载完成后转发
  await wx.shareFileMessage({filePath: tempFilePath,})

效果就是下载完后直接打开微信选择聊天记录界面,选择某个聊天记录就将该文件发送过去了,就不截图了。

 p.s  解决使用uni.shareFileMessage与wx.shareFileMessage转发文件到好友,安卓手机不识别后缀问题, 苹果正常

image

 

原因:

首先这是因为我们使用downloadFile下载文件的时候,默认是保存至临时文件,返回的结果是临时路径,在这个临时路径中,IOS可以识别出来文件的后缀,而安卓不能识别。

image

 参数传入下载的URL,并且指定下载位置,使用微信文件配置wx.env.USER_DATA_PATH,后面可以自定义自己的路径,支持多层级,但是最后一级必须带文件后缀,你要下载的文件后缀是什么就写什么,必须带文件后缀。

image

 

image

在分享shareFileMessage的方法中,支持文件名fileName自定义。

这个fileName是什么 发送到聊天就是什么。

image

 

三、方案二

​ 先使用下载文件api把文件下载下来,再使用wx.openDocument() 打开文件里面加上showMenu字段,然后就可以看到在打开的文件右上角出现了···

​ ios表现:ios点击之后会有发送给朋友的选项,选择分享给朋友之后就可以把文件直接发送给对方了,然后你就可以在聊天记录里面拿到这个文件;

​ 安卓表现:安卓手机里面有保存文件的选项;

缺陷:不能 “下载”后直接选择某个文件发给其他人,这个方案每次想发送必须先上小程序找到该文件,下载打开文件再去转发(而且必须是微信好友);或者在之前转发的聊天记录里面找到该文件。

downloadFileOpen(){let link = 'https://www.gjtool.cn/pdfh5/git.pdf'//下载文件
   wx.downloadFile({url: link,success (res) {if (res.statusCode === 200) {const filePath = res.tempFilePathwx.openDocument({filePath: filePath,showMenu:true, //关键点success: function (res) {console.log('打开文档成功')}})}}})
}

安卓具体表现:

image

ios具体表现:

image

 

 

总结

仔细看官方文档还是能看到这个“文件下载保存功能”不是我们正常想的下载文件到手机里面,随便可以分享的。

方案一与方案二都经过线上验证使用。

 

http://www.jsqmd.com/news/37649/

相关文章:

  • 2025年11月豆包关键词排名优化推荐:主流机构排行榜高性价比选择指南
  • 2025年11月北京GEO优化公司推荐:知名机构排行榜口碑评价对比指南
  • 2025年11月geo供应商推荐:知名机构排行榜口碑评价对比指南
  • 学习如何转换异步数据
  • django orm save方法的坑
  • matlab实现TCM-8PSK的调制解调,跑出误码率曲线
  • 【LVGL】复选框部件
  • 总平方和SST、回归平方和SSR、残差平方和SSE
  • serializers.ModelSerializer进行序列化和反序列化时,只传递instance和只传递data以及同时传递instance和data参数作为序列化输出和反序列化输入的数据源
  • 深入解析:服务注册 / 服务发现 - Eureka
  • 小型skywalking - ukyo-
  • 完整教程:顺序步进频与捷变频雷达:原理、建模与测距方法
  • 完整教程:在 Claude Code 中设置 MCP 服务器(技术总结)
  • Linux使用CentOS 7内核修改镜像源解决“Could not resolve host: mirrorlist.centos.org;未知的错误“问题
  • 艾体宝干货 | Redis Python 开发系列#2 核心数据结构(上)
  • [GXYCTF2019]Ping Ping Ping wp - fish666
  • 2025 年 11 月码垛机厂家推荐排行榜,全自动/高位/低位/立柱/编织袋/纸箱/桶/粉料/肥料码垛机,江苏/无锡码垛机器人实力解析
  • 2025年西瓜专用膜厂家权威推荐榜单:水果专用膜/长寿流滴膜/灌浆膜源头厂家精选
  • 2025 年 11 月包装称厂家权威推荐榜:全自动/定量/FFS重膜/高速/锂电/零排放/螺旋/吨袋包装称,铜精粉与肥料吨包高效解决方案
  • 基于MATLAB图像特征识别及提取实现图像分类
  • Strix:用AI做渗透测试,把安全漏洞扼杀在开发阶段
  • 无限长直导线周围电场分布的MATLAB
  • Codeforces Round 1063 (Div.2) 题解
  • SI502、SI502B——NFC前端芯片
  • 草稿5
  • 1-2-3-泛型与反射
  • 读书笔记:白话解读:Oracle并行加载与空间管理的艺术
  • 1-2-4-集合框架
  • 1-3-1-知识图谱
  • USB --- PD协商