IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 小程序下载预览pdf,文档打不开解决方案 -> 正文阅读

[移动开发]小程序下载预览pdf,文档打不开解决方案

小程序打开pdf,有3种方式

1、webview打开,这里不做赘述

2、文档二进制流打开,参考其他文章

3、今天的重点,wx.downloadFile,wx.openDocument

操作过程中遇到的一些坑,首先是我用网上常规的操作wx.downloadFile,wx.openDocument,开发工具显示正常,真机可能会走到‘打开文档失败’;真机调试发现是 filePath=?wx.env.USER_DATA_PATH + '/' + ‘xxx.pdf’,报错没有修改名字的权限,如图二:

又或出现这种bug,打开文档后,再次打开其他pdf文档,显示的还是第一次打开的pdf文件,也就是说打开的是最先缓存过的文件,这个缓存机制自己下去研究。

if (that.data.pdfSrc1) {
  wx.showLoading({
    title: 'pdf预览准备中',
  })
  wx.downloadFile({
    url: that.data.pdfSrc1,//pdf链接
    success(res) {
      let  filePath= wx.env.USER_DATA_PATH + '/' + '报告详情.pdf';
      wx.openDocument({
        filePath: filePath,
        success: function (res) {
          wx.showToast({
            title: '打开文档成功',
          })
          wx.hideLoading()
        },
        fail: function (res) {
          wx.showToast({
            title: '打开文档失败',
          })
        },
      })
    },
  })
}

解决方案:使用 wx.saveFile 微信保存文件临时存储路径,再使用官方的wx.env.USER_DATA_PATH修改本地路径名称,至此,解决显示问题、缓存问题以及名字修改问题
? ? ? ? ? ? ? ? ? ??

wx.downloadFile({
  url: that.data.pdfSrc1,//pdf链接
  success(res) {
    wx.saveFile({ //重点 wx.saveFile一定要有   避免文件存储找不到  然后打开失败
      tempFilePath: res.tempFilePath,
      filePath: wx.env.USER_DATA_PATH + '/' + '报告详情.pdf',
      success(res) {
        wx.openDocument({
          filePath: res.savedFilePath,
          fileType: "pdf",
          showMenu: true,
          success: function (res) {
            wx.showToast({
              title: '打开文档成功',
            })
            wx.hideLoading()
          },
          fail: function (res) {
            wx.showToast({
              title: '打开文档失败',
            })
          },
        })
    }}) 
  },
})

补充个二进制流的方案? 需要后台配合写个解析接口

  wx.request({
    url: 'http:/XXXXX/downloadReport.cs?id='+ obj.id,
    method: 'POST',
    header: {
      "content-type": "application/json",
    },
    responseType: "arraybuffer", //注意这里的responseType
    success: (result) => {
      console.log("下载成功!", result);
      var fileManager = wx.getFileSystemManager();
      var FilePath =  wx.env.USER_DATA_PATH + '/' + '报告详情1111'+'.pdf';
        //这里同样可能有问题  我这个打开后显示文档损坏   参考上面的方案解决  
      fileManager.writeFile({
        data: result.data,
        filePath: FilePath, 
        showMenu: true, // 显示右上角菜单
        encoding: "binary", //编码方式 
        success: res => {
          console.log('编码格式');
          wx.openDocument({ //成功之后直接打开
            filePath: FilePath, 
            showMenu:true,
            fileType: "pdf",
            success: result => {
              console.log("打开文档成功");
            },
            fail: err => {
              console.log("打开文档失败", err);
            }
          });
        },
        fail: res => {
          wx.showToast({
            title: '导出失败!',
            icon: 'none',
            duration: 2000,
          })
          console.log(res);
        }
      })
    },
    fail(err) {
      console.log(err)
    }
  })

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:04:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:32:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码