关于微信小程序保存文件的最佳解决方案

news/2024/7/20 3:47:51 标签: 微信小程序, javascript, 小程序

最近在写小程序>微信小程序的时候,涉及了用户下载文件到本地的需求。去看了下文档,首先要先通过wx.donwloadFile,将文件下载到本地。
在这里插入图片描述
然后我记得有一个saveFileAPI,可以进行文件的保存,看了下文档,看到这个API已经停止维护了。

在这里插入图片描述
推荐使用的是FileSystemManager.saveFile,而这个FileSystemManager是通过wx.getFileSystemManager获取。

经过一些列的操作之后,终于可以使用FileSystemManagersaveFile方法了。

javascript"> downloadFile(e) {
    const { item: { printImg } } = e.currentTarget.dataset;
    wx.showLoading({
      title: '下载中',
    })
    wx.cloud.downloadFile({
      fileID: printImg, // 文件 ID
      success: res => {
        // 返回临时文件路径
        console.log(res.tempFilePath);
        const fileManager = wx.getFileSystemManager();
        fileManager.saveFile({
          tempFilePath: res.tempFilePath,
          success: (res) => {
            console.log(res, '下载成功');
            wx.hideLoading();
          }
        })
      },
    })
  },

然后,重要是FileSystemManager.saveFile在成功执行之后的返回值,会有一个saveFilePath,也就是这个文件被保存到了哪儿。

在这里插入图片描述
但是,单纯看这个路径,是不容易找到这个文件。
微信的解释是,想维护一个属于小程序自己的域,不想共享到外部,所以,这个文件地址是一个相对隐式的地址,不容易被直接找到。

我查阅了很多的资料,找到了一个目前我认为最优的解决方案。

既然,给咱们返回的这个保存地址不容易被找到,那就让机器去找,小程序>微信小程序有一个API可以打开文档,是openDocument,重点是它有一个showMenu的属性,也就是预览文档的时候,右上角会出现一个三个点...,点击之后有保存等操作。这个保存是显式的保存,可以被直接找到。

javascript">  downloadFile(e) {
    const { item: { printImg } } = e.currentTarget.dataset;
    wx.showLoading({
      title: '下载中',
    })
    wx.cloud.downloadFile({
      fileID: printImg, // 文件 ID
      success: res => {
        // 返回临时文件路径
        console.log(res.tempFilePath);
        const fileManager = wx.getFileSystemManager();
        fileManager.saveFile({
          tempFilePath: res.tempFilePath,
          success: (res) => {
            console.log(res, '下载成功');
            wx.hideLoading();
            wx.openDocument({
              filePath: res.savedFilePath,
              showMenu: true,
            })
          }
        })
      },
    })
  },

我分别在PC端和移动端展示一下。

首先是PC端,在点击下载文件按钮时。

在这里插入图片描述
会弹出一个文档的预览界面。

在这里插入图片描述
这里面有打印、另存为等一系列的操作,就可以实现预期的需求。

在这里插入图片描述
其实看一下这个文档的地址栏,也能看出来,其实这个saveFileAPI保存的地址是不想让你找到的,路径里有AppData,这是个C盘的目录,默认其实是隐藏的,只有你设置过,才会显示。所以,我们需要找到更好的解决方式。

然后是移动端。

移动端同样点击下载文件按钮后,也弹出了一个预览文档的界面,重点是看右上角,当设置了openDocument这个APIshowMenu属性为true之后,就会出现这三个点...

请添加图片描述
点击这三个点...之后,会出现保存到手机的操作。

请添加图片描述
点击之后,就可以在自己的文件管理里,很明显的找到这个文件,如果不做这一步操作,你是不容易找到saveFile这个API的保存位置的。

请添加图片描述
目前,我觉得这是这好的解决方案了。我看到还有一些建议是,在saveFile的时候,将文件保存为一个图片,图片在进行保存的时候,是可以直接显式的保存到相册了。
然后再通过改后缀的方式,改回原来的文件后缀,很明显这样的方案,需要用户进行大量的自主操作,我觉得不太合适。

QQ: 505417246
WX: 18331092918
微信公众号: Code程序人生
CSDN账号: CreatorRay
B站账号: LuckyRay123
个人博客: http://rayblog.ltd/
欢迎关注我的各类账号, 持续更新优质前端内容


http://www.niftyadmin.cn/n/1576331.html

相关文章

主站sinox.org堵塞太厉害,大家用sinox.3322.org訪问

近期 www.sinox.org域名堵塞太厉害了。差点儿不能訪问,如今大家用sinox.3322.org訪问 sinox.org仅仅是显示正在建设 一直以来sinox.org仅仅是个摆设,并非主要域名,就像公司要有个门面。事实上这个门面可有可无。事实上文章会反复公布到 csdn博…

手写实现Vue内置组件component(Vue进阶)

Hello, 好久不见,最近遇到了很多的事情,因为春招形势很差,本来想签了一个薪资差不多的,想先积累经验等经济回暖。结果在入职前两周被毁约了,现在只能破罐子破摔,大概率要run去社招了。 最近在复…

管理和维护RHCS集群

2019独角兽企业重金招聘Python工程师标准>>> 启动RHCS集群 RHCS集群的核心进程有cman和rgmanager。要启动集群,依次启动cman,然后再启动rgmanager,操作如下: 在主机web1上启动集群服务: [rootweb1 ~]# service cman st…

IO-字符流-FileReader

FileReader 读数据构造方法:FileReader(String fileName) 传递要读取的文件名称成员方法:int read() 读取单个字符并返回int read(char[] cbuf) 一次读取一个字符数组的数据,返回的是实际读取字符的个数.输入流读文件的一般步骤:1.创建输入流对象2.调用输入流对象的对数据方法3…

工作流学习——Activiti整体认识二步曲

2019独角兽企业重金招聘Python工程师标准>>> 工作流学习——Activiti整体认识二步曲 标签: 工作流工作流引擎activiti 2015-06-22 17:47 10603人阅读 评论(6) 收藏 举报 本文章已收录于: Java 知识库 分类: java学习(…

微信小程序自定义tabbar底部导航栏

最近开始在写一个零基础从0写一个失物招领小程序的系列视频,涉及到了自定义tabBar,也就是底部导航栏的内容。看了下我的博客似乎之前没更新过,所以给大家写一篇。 首先我们先去看下官方文档: 其实大致来说,可以总结为三…

《Hadoop与大数据挖掘》一2.4.2 MapReduce原理

本节书摘来华章计算机《Hadoop与大数据挖掘》一书中的第2章 ,第2.4.2节,张良均 樊 哲 位文超 刘名军 许国杰 周 龙 焦正升 著 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.4.2 MapReduce原理 1.通俗理解MapReduce原理现在你接到…

将luarocks整合进openresty

缘由 随着功能需求的深入, openresty领域的包已经不够用了, 需要lua领域本身累积的库, 也就是luarocks. 本文讲解了windows 10桌面和ubuntu server两套系统的方法 Ubuntu Server 比较简单, 无脑敲命令即可 $ wget https://luarocks.org/releases/luarocks-2.4.1.tar.gz $ tar z…