微信小程序文件预览和下载-文件系统

这篇具有很好参考价值的文章主要介绍了微信小程序文件预览和下载-文件系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件预览和下载

在下载之前,我们得先调用接口获取文件下载的url
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
然后通过wx.downloadFile将下载文件资源到本地

wx.downloadFile({
   url: res.data.url,
   success: function (res) {
      console.log('数据',res);
   }
})

微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
tempFilePath就是临时临时文件路径。
通过wx.openDocument打开文件。
showMenu表示预览文件右上方的菜单,你可以在该菜单中选择保存文件,将文件显示的保存到本地。

// 预览和下载
wx.downloadFile({
   url: res.data.url,
   success: function (res) {
      const filePath = res.tempFilePath  // 临时文件路径
      wx.openDocument({
         filePath: filePath,
         showMenu: true // 预览文件右上方的...
      })
    }
})

到这里文件的预览和存储就完成了,你可以显示的看到文件的存储位置。
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
这是文件操作的其中一种方式,如果你要具体的操作文件,请继续向下看。


文件系统

文件系统是这篇着重要讲的,其实在上文中提到的wx.downloadFile这一步就是文件下载的关键,文件下载成功(临时)会触发success回调,你可以通过DownloadTask监听文件下载的进度,当downloadTask进度为100时,downloadFilesuccess下载成功就会被触发。

      const downloadTask = wx.downloadFile({
        url: res.data.url,
        success: function (res) {
          // progress进度100时触发success
        }
      })
      downloadTask.onProgressUpdate((res) => {
        console.log('下载进度', res.progress)
        console.log('已经下载的数据长度', res.totalBytesWritten)
        console.log('预期需要下载的数据总长度', res.totalBytesExpectedToWrite)
      })

微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5

wx.downloadFiletempFilePath对应的就是临时文件的存储位置,这个文件是会被删除的。因此如果你需要持久化文件,则需要调用saveFile来保存文件。同时tempFilePath也可以作为一个中转,为后续使用资源提供支持,所以我们在后续调用wx.openDocument时,tempFilePath其实是做了文件中转,在openDocument对文件做了后续的保存或预览操作。
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5

微信小程序本身自带一个文件系统,官网介绍:文件系统

在文件系统中有关于本地临时文件的介绍:

本地临时文件只能通过调用特定接口产生,不能直接写入内容。本地临时文件产生后,仅在当前生命周期内保证有效,重启之后不一定可用。如果需要保证在下次启动时无需下载,可通过 FileSystemManager.saveFile() 或 FileSystemManager.copyFile() 接口把本地临时文件转换成本地缓存文件或本地用户文件。

在上文中我们将wx.downloadFile返回的临时路径当作中转,调用wx.openDocument来保存文件,这是一种方法,还有一种就是操作文件系统API,对临时文件进行移动、保存、复制等操作。

下面我们通过文件系统来实现文件的保存:

API文档:wx.getFileSystemManager()

流程如下:

1、获取文件下载url

2、wx.downloadFile下载文件

3、判断文件夹是否存在:

  • 存在:通过saveFile直接下载
  • 不存在:通过mkdir创建文件夹,创建完成后,通过saveFile直接下载
  async downloadPdf(id) {
    let that = this;
    let res = await getPdfAPI(id);
    // 下载文件
    wx.downloadFile({
      url: res.data.url,
      success: async (res) => {
        // 设置存储路径
        let myPath = wx.env.USER_DATA_PATH + '/MyFile'
        try {
          // 判断文件夹是否存在
          await that.fileExist(myPath)
          // 存在: 保存文件到本地
          await that.fileSave(res.tempFilePath, myPath).catch(err => console.log(err));
          wx.showToast({
            title: '保存成功',
            icon: 'none'
          })
        } catch (e) {
          // 不存在: 创建文件夹
          await that.fileMkdir(myPath).catch(err => console.log(err));
          // 保存文件到本地
          await that.fileSave(res.tempFilePath, myPath).catch(err => console.log(err));
          wx.showToast({
            title: '保存成功',
            icon: 'none'
          })
        }
      }
    })
  },

  // 保存文件
  fileSave(tempFilePath, myPath) {
    return new Promise(function (resolve, reject) {
      const fileManager = wx.getFileSystemManager(); // 文件系统
      fileManager.saveFile({
        tempFilePath: tempFilePath, // 临时文件路径
        filePath: myPath + '/myFileName.pdf',  // 文件夹路径 + 文件名
        success: function (res) {
          resolve(res)
        },
        fail: function (err) {
          reject(err)
        }
      })
    })
  },

  // 创建文件夹
  fileMkdir(myPath) {
    return new Promise(function (resolve, reject) {
      const fileManager = wx.getFileSystemManager(); // 文件系统
      fileManager.mkdir({
        dirPath: myPath, // 文件夹路径
        success: function (mkdir) {
          resolve(mkdir)
        },
        fail: function (mkdirerr) {
          reject(mkdirerr)
        }
      })
    })
  },

  // 判断文件夹是否存在
  fileExist(myPath) {
    return new Promise(function (resolve, reject) {
      const fileManager = wx.getFileSystemManager(); // 文件系统
      fileManager.access({
        path: myPath,  // 文件夹路径
        success: function (exist) {
          resolve(exist)
        },
        fail: function (err) {
          reject(err)
        }
      })
    })
  },

注意点:

1、saveFile自定义保存路径filePath文件夹路径+文件名的拼接

2、saveFile接收的文件路径为wx.downloadFile获取的临时路径tempFilePath

3、wx.env.USER_DATA_PATH是一个字符串,表示文件系统中的用户目录路径 (本地路径)

关于存储位置:

PC端中:

wx.env.USER_DATA_PATH默认指向usr文件夹,微信开发者工具中可以看到保存路径:
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5

真机中:
真机的默认存储位置为:内部存储/Android/data/com.tencent.mm/MicroMsg/wxanewfiles/
也就是wxanewfiles文件夹下的子文件夹,该文件夹不固定
微信小程序下载文件,原生微信小程序,微信小程序,javascript,vue.js,前端,react.js,css3,html5


参考文档:
wx.downloadFile
wx.openDocument
DownloadTask
wx.env
文件系统
wx.getFileSystemManager()
FileSystemManager.mkdir(Object object)
FileSystemManager.saveFile(Object object)
FileSystemManager.access(Object object)


如果你觉得本文章不错,欢迎点赞👍、收藏💖、转发✨哦~
阅读其它:
微信小程序记住密码,让登录解放双手 (👈点击直达)
微信小程序动态生成表单来啦!你再也不需要手写表单了! (👈点击直达)
根据URL批量下载文件并压缩成zip文件 (👈点击直达)
文档、视频、图片上传(点击、拖拽、批量导入)要‍‍‍‍怎么实现?! (👈点击直达)
一文搞懂原型和原型链 (👈点击直达)文章来源地址https://www.toymoban.com/news/detail-763561.html

到了这里,关于微信小程序文件预览和下载-文件系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp实现h5、app、微信小程序三端pdf文件下载和预览

    以下代码兼容三端,app,h5,微信小程序,经过个人测试 手机端有两种方法,使用renderjs或者uniapp的api 两者的区别 使用renderjs的写法,会提示用户是否下载文件,下载完成后用户需要手动点击下载的文件,才会打开文件 使用uniapp的api则可以直接下载并直接预览,不需要用户操

    2024年02月11日
    浏览(54)
  • uniapp - 微信小程序平台实现预览 office 文件及保存下载到本地功能,将word/excel/ppt/pdf等文件在小程序内进行预览,用户可以保存和转发给好友进行下载到手机(一键复制运行)

    在uniapp微信小程序开发中,预览文件、下载文件并保存到手机本地功能(支持office全套word/pdf/ppt/excel等),兼容安卓和苹果端非常好用, 本文有2种方案,愿意用哪个就用哪个,都有示例代码和详细说明。

    2024年02月08日
    浏览(232)
  • 微信小程序原生上传图片和预览+云函数上传

    展示     1.2.1 uploadPage 说明:调用方法就是属性值是一个函数,因此要注意this问题。要将this指向原来的位置。 展示  说明:点击上传页面展示,在这里我点击了两次 !   1.2.2uploadPreview 说明:需要学习Array.map方法的使用。  展示 说明:点击图片后全屏显示  1.2.3deleteImage按

    2024年02月06日
    浏览(104)
  • vue3管理系统中后台返回pdf格式的文件流,前端如何预览?以及uniapp微信小程序中后台返回的base64位的pdf文件如何预览?

    后台返回的是base64格式的pdf文件,首先需要解析base64文件的插件 image-tools 1 安装并引入插件 2 封装预览pdf的函数 3 调用接口获取数据

    2024年01月18日
    浏览(83)
  • uniapp —— 微信小程序预览文件

    1.问题:但是内置方法一般使用的是url预览,如果接口返回的是文件流,前端如何处理 uni.downloadFile uni.openDocument 2.解决:后端接口路径拼接,如果使用的是PC端下载文件的接口,但接口返回的是文件流,可以将地址进行拼接,放到uni.downloadFile中的url中 3.tip:网上的其他办法,

    2024年02月12日
    浏览(66)
  • 实现微信小程序预览文件,预览页面添加倒计时

    提示:1、实现小程序预览 doc、docx、xls、xlsx、ppt、pptx、pdf类型文件            2、进入页面展示文件内容、开始按钮,点击,按钮变为【(**s)】倒计时            3、倒计时结束后,此按钮消失,弹出显示【完成】,弹框保留2s后小时,用户继续阅读 例如:项目场景

    2024年02月13日
    浏览(64)
  • 微信小程序预览二进制流文件

    在线预览doc/xls/xlsx/ppt/txt/pdf 的文件和图片。 将后台返回的二进制流,写入微信的文件管理器。 打开文件。 wx.openDoucument不支持预览txt文件。 原本都是调用这个方法,根据isTxt判断是否为文本文件做不同的操作。在安卓真机调试发现打开失败,说找不到路径。 缩略图预览(增

    2024年02月09日
    浏览(51)
  • 微信小程序上传文件及图片(可以预览)

    最近在写小程序项目,碰到了一个需求,需要用户可以上传各种类型的文件和图片,展示在页面上,并且点击还可以进行预览,就找了找微信小程序官网,写了一个例子,分享一下 直接看代码: wxml: wxss: js: 有问题和建议欢迎大家留言

    2024年02月12日
    浏览(51)
  • uni-app之微信小程序实现‘下载+保存至本地+预览’功能

    目录 一、H5如何实现下载功能 二、微信小程序实现下载资源功能方面与H5有很大的不同 三、 微信小程序实现文件(doc,pdf等格式,非图片)下载(下载-保存-预览)功能 四、图片预览、保存、转发、收藏:uni.previewImage() 五、 我当前遇到‘关于文件预览uni.openDocument()’API的问

    2024年02月15日
    浏览(62)
  • H5和微信小程序实现文件预览功能

    提示:本文仅供参考: 最近新增了一个需求,要求在H5和微信小程序生成方案并查看ppt和excel功能。本项目是taro框架打包生成的H5和小程序,代码仅供参考。 代码如下(示例): 代码修改如下(示例): 代码如下(示例): 1:先把本地的微信开发者工具,不校验HTTPS关掉再

    2024年02月17日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包