微信小程序预览pdf,页面缓存下载过的pdf

需求:
  点击预览图标查看该pdf报告

问题:
  1、最早是直接将请求到的url放入到<web-view src="{{realUrl}}"></web-view>中展示,ios可以,安卓显示无法查看。
  2、通过微信自身的API实现:wx.downloadFile({})、wx.saveFile({})、wx.openDocument({})
  3、对于文件较大的,下载较慢,需要点击过的进行缓存,再次点击无需下载,直接打开。
  将点击过的下载的url添加给list的temUrl,再次点击的时候判断该行是否存在temUrl,存在的话则直接wx.openDocument({})打开该url;不存在的话则先下载保存再去打开。当退出该页面时,缓存消失,因为是给list列表添加新的属性保存url,如果再次进入刷新页面则请求到的数据会重新给list进行赋值。
在这里插入图片描述

<view bindtap="onLoadClick" data-id="{{item.id}}" data-name="{{item.fileName}}"><image class="downLoad" src="../../../images/preview-open.png"></image></view>
downloadfile: function (url, name, id) {
    let list = this.data.list
    let falg
    let listUrl
    list.find(item => {
      if (item.id === id) {
        falg =  item.hasOwnProperty('temUrl')
        listUrl = item.temUrl
      }
    })
      //下载文件,生成临时地址
      wx.showLoading({
        title: '下载中',
      })
      if (falg) {
        //保存到本地
        wx.openDocument({
          filePath: listUrl,
          fileType: 'pdf',
          success: function (res) {
            wx.hideLoading()
          },
          fail: function (err) {
            wx.hideLoading()
          },
          // showMenu: true
        })
      } else {
        wx.downloadFile({
          url: url, 
          success(res) {
            //保存到本地
            wx.saveFile({
              tempFilePath: res.tempFilePath,
              id: id,
              // 给文件重命名
              filePath:wx.env.USER_DATA_PATH+'/' + name,
              success: function (res) {
                wx.hideLoading()
                const savedFilePath = res.savedFilePath;
                list.find(item => {
                  if (item.id === id) {
                    item.temUrl = savedFilePath
                  }
                })
                  // 打开文件
                  wx.openDocument({
                    filePath: savedFilePath,
                    fileType: 'pdf',
                    success: function (res) {
                      // console.log('打开文档成功')
                    },
                    fail: function (err) {
                      wx.hideLoading()
                      // console.log('打开失败:', err)
                    },
                    // showMenu: true
                  })
                },
                fail: function (err) {
                  hideLoad()
                  wx.showModal({
                    title: '提示',
                    content: '小程序暂不支持此类型文件预览',
                    showCancel: false,
                    success (res) {
                      if (res.confirm) {
                        // console.log('用户点击确定')
                      } else if (res.cancel) {
                        // console.log('用户点击取消')
                      }
                    }
                  })
                }
            });
          }
        })
      }
      this.setData({
        "list": list
      })
      // console.log('lits', list)
  },
  getListDetail: function (query) {
    util.dataInformation('加载中', `/file/view`, 'GET', query, res => {
      if (res.data.data) {
        let data = res.data.data
        // console.log('data', data)
        this.setData({
          "url": data
        })
        this.downloadfile(data, this.data.name, this.data.urlParams.id)
      }
    })
  },
  onLoadClick: function (e) {
    let id = e.currentTarget.dataset.id
    this.setData({
      "urlParams.id": id,
      "name": e.currentTarget.dataset.name
    })
    this.getListDetail(this.data.urlParams)
  },

在这里插入图片描述
在这里插入图片描述

参考文章:
小程序web-view打开PDF格式文件的安卓苹果兼容性问题
微信小程序web-view安卓提示无法打开页面为什么?
微信小程序-WX.DOWNLOADFILE()文件管理之下载、打开、重命名
getSavedFileList返回fileList为空
wx.saveFile(Object object)

### 微信小程序开发文档 PDF 下载 对于微信小程序中实现开发文档的 PDF 版本下载,可以采用如下方式: 当 URL 是以 `.pdf` 结尾时,可以直接利用微信内置浏览器打开并查看该 PDF 文件[^1]。然而,在实际应用中,如果遇到的是一个仅用于触发下载行为而非直接指向 PDF 资源的链接,则需采取额外措施来处理这种情况。 为了确保能够顺利获取到目标文件而不是 HTML 页面或其他类型的响应数据,建议先发送 HTTP 请求检查服务器返回的内容类型(Content-Type),确认其确实是 application/pdf 类型后再执行进一步操作。此外,还可以考虑使用 wx.downloadFile API 来完成具体下载任务,并设置合适的参数以便保存至本地缓存目录或临时文件路径下供后续查阅[^2]。 下面是一段简单的代码片段展示如何调用微信小程序中的 `wx.downloadFile()` 方法来进行 PDF 文档下载: ```javascript // 假设 pdfUrl 为有效的 PDF 文件下载链接 const pdfUrl = 'https://example.com/path/to/document.pdf'; function downloadPdf() { wx.downloadFile({ url: pdfUrl, success(res) { const filePath = res.tempFilePath; console.log('Downloaded file path:', filePath); // 使用 wx.openDocument 打开已下载PDF 文件 wx.openDocument({ filePath: filePath, fileType: 'pdf', success() { console.log('Opened the downloaded PDF successfully.'); }, fail(err) { console.error('Failed to open the downloaded PDF.', err); } }); }, fail(err) { console.error('Failed to download the PDF.', err); } }); } ``` 此代码展示了如何通过指定合法的 PDF 文件 URL 并调用相应的小程序接口来实现自动下载以及立即预览的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值